2011-12-02 47 views
0

简言之,我希望能够将IEnumerable分配给我的Context.Customers属性(这是从SQL类型System.Data.Linq.Table导入的表;客户正在一个实体类型)。DataContext对象并指定其属性

现在你可能会想知道的第一件事是'你为什么要这样做?'是的,通常有更好的方法来做到这一点,但我并不是在一般情况下运作。我的项目受到限制意味着我无法访问项目的“网络”部分。因此,我正在使用IIS中托管的WCF服务来解决这个问题。该服务包含DataContext对象并调用数据库,并与Silverlight应用程序进行通信。

Silverlight应用程序调用GetCustomersAsynch,然后等待已完成的事件,此时它可以使用一组Customer实体。我的问题是关于提交这些更改。我可以将已更改的集合发送回WCF服务,但DataContext对象的'Customers'属性是只读的,所以我不能将其分配给另一个。我不能只是一个一个写一个,因为可能会添加一个新条目(或者可能是新条目)。我想要的是使用传递的集合更新DataContext的Customers属性,然后在DataContext上调用Submit来将更改提交到数据库。

如果有人有任何建议或意见,请让我知道。

在此先感谢。

+1

您使用的是WCF RIA服务,WCF数据服务还是纯粹的WCF服务? – Aligned

+0

我不明白你在做什么。 'DataContext'应该是'System.Data.Linq.DataContext'类,不是吗?但如果是这样,如果Silverlight不支持LINQ to SQL,如何在Silverlight代码中使用它?您不应该事件能够添加对相应的程序集的引用。 –

+0

啊,我想我已经提到过那一个。 DataContext实例位于WCF服务中。我通过从Silverlight应用程序调用我的WCF服务来访问它中的信息。当我将新数据传递给服务时,我需要它来更新DataContext对象,然后才能让它提交其更改。 – user738383

回答

0

你可以在你的WCF服务中有一个静态的DataContext,虽然它通常是不鼓励的。然后将整个对象从Silverlight发送到WCF服务方法。在WCF服务方法内部,调用staticCtx.UpdateObject(customer);和SubmitChanges()。如果使用相同的staticCtx加载客户对象,则UpdateObject将更改状态以更改状态,submitChanges将通过引擎发送它以将其转换为更新SQL。静态上下文可能有几个副作用,所以要小心。

另一种选择是使用WCF数据服务或WCF RIA服务(L2S工作)和实体框架。然后你可以在客户端上实际调用SubmitChanges并使用LINQ从客户端进行查询。

这里是one of many RIA Services可用的文章和WCF Data Services的文章。关于如何在两者之间做出选择有很多考虑因素。