是否建议将自我跟踪实体与WCF服务一起使用?

时间:2011-07-10 16:43:10

标签: wcf entity-framework self-tracking-entities

我想知道在WCF服务中是否建议使用Self Tacking Entities(在Entity Framework中)?如果是的话,那么你可以指导我一个指导如何做到这一点的教程吗?

实际上,我将使用Prism与MEF和MVVM开发WPF应用程序。我决定使用Entity Framework。我想要有关这种方法的建议和建议。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:7)

  

我想知道是否使用Self Tacking Entities(在Entity Framework中)   推荐使用WCF服务?

这取决于你的要求。如果你问MS,他们会告诉你是的,因为他们根本没有更好的东西。 STEs回应了这个非常古老的MS Connect suggestion。问题是EF本身有terrible bad support用于合并两个实体图之间的变化(你必须完全自己完成)和开发MS平台(有时包括我)的开发人员有一些共同的行为:

  • 他们懒得开发自己的问题解决方案,他们希望在MS提供的API中直接提供一些魔力。
  • 大多数时候,他们没有接受过必须使用的技术的训练/技能/能力,因为他们不得不经常搬到新的技术。
  • 他们所知道的唯一API是.NET Framework的一部分。他们不会寻找其他选项,也不会比较功能。

前两点是MS策略的结果,其中RAD成为设计师的同义词(或新的T4模板)。

share @Richard对STE的看法。我想补充一点STE的另一个缺点 - 他们在参与者之间移动大数据集。如果您决定从服务器获取实体图,则更改图中的单个实体并将数据推回,它们将再次传输整个图。只转移已更改的实体会导致与STE的核心逻辑作斗争。我也害怕他们完全跟踪每个实体级别的变化,而不是每个属性级别。如果修改具有大型二进制或字符串数​​据的实体,则可能导致在服务和数据库之间以及服务和客户端之间传输过多不需要的数据。

无论如何,对于具有低数据流量和小型实体的简单应用程序,他们可以做得很好,并允许您快速构建应用程序,但不会严格分离关注点。您将从服务中获取实体并将它们直接绑定到WPF UI,他们将能够为您跟踪更改。稍后您将推送实体返回服务,他们将能够持续更改。您的客户端和服务将紧密耦合,但在某些情况下,它可以很好。

答案 1 :(得分:4)

我会避免自我跟踪实体 - 我在博客上发表了here

创建您自己的DTO并使用它们来管理数据传输 - 然后在服务中生成您的POCO对象并将它们与实体框架一起用于持久性

如果你想进行自我跟踪,那么方法会更加清晰here