实体框架4+;Silverlight持久实体图

实体框架4+;Silverlight持久实体图,silverlight,entity-framework-4,persistence,Silverlight,Entity Framework 4,Persistence,我们目前正在使用Silverlight 4(使用PRISM)和Entity Framework 4构建我们的第一个大型应用程序。现在我有一个关于持久化视图模型数据的一般性问题。 假设我有一个域对象,它转换为具有多个关联的EF4实体(实体具有集合,再次具有集合等等)。在用户操作期间/之后保存这些图形的最佳方法是什么?编写更细粒度的存储库方法,如“AddEntityToParent”和“RemoveEntityFromParent”,还是从视图中获取所有数据并将其推送到“SaveLargeParen

我们目前正在使用Silverlight 4(使用PRISM)和Entity Framework 4构建我们的第一个大型应用程序。现在我有一个关于持久化视图模型数据的一般性问题。 假设我有一个域对象,它转换为具有多个关联的EF4实体(实体具有集合,再次具有集合等等)。在用户操作期间/之后保存这些图形的最佳方法是什么?编写更细粒度的存储库方法,如“AddEntityToParent”和“RemoveEntityFromParent”,还是从视图中获取所有数据并将其推送到“SaveLargeParentEntity”方法?
我是否可以在Silverlight中“缓存”子对象的视图模型项,并在以后将其全部下推到EF4,还是必须对用户界面中更改的每个项进行粒度更新?有什么好建议吗?我希望我的问题足够清楚。谢谢。

您实际上是在基本CRUD操作和使用对象图之间做出选择。我会选择第二种方法,因为

使用通过web服务发送的对象图时,必须处理分离的行为。更新关系时分离的实体+对象图。最好的方法通常是在更新之前加载整个图形(获取附加的实体),并将收到的图形合并到附加的图形中-它将为您正确跟踪更改


但是因为您使用的是有状态的Silverlight,所以您也可以考虑使用自跟踪实体(STE)。STE能够在与EF ObjectContext分离后跟踪更改。所以,您可以将由STE组成的对象图从web服务返回到Silverlight应用程序,对STE进行一些更改,并将相同的对象图发送回web服务。STEs将为您处理大量工作。请注意,对于应向一般web应用程序或非.NET客户端公开的服务,

感谢您周到的回答!当使用自跟踪实体时,我必须直接公开这些实体类,从而紧密耦合我的层…@Malkier:是的,这是STE的缺点,也是STE不能用于.NET客户端的原因。