EF4 POCO:快照与WCF上的自我跟踪

时间:2010-02-26 00:25:07

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

去年,我使用Entity Framework(当然是.NET3.5)为我们的项目开发了一个数据访问服务,并使用Julie Lerhman的书作为指导开发了状态跟踪POCO对象。我们使用WCF并且还拥有Silverlight 3客户端。我们正在转向.NET 4.0,我想转而使用代码生成来消除浪费的开发人员编写POCO类和翻译类的时间。

通过我所做的研究,似乎有三种状态跟踪POCO的方式:

1)更改了跟踪代理:对我们似乎没有用,因为它似乎不适用于WCF序列化。

2)基于快照:检索POCO实体图时拍摄快照,将客户端返回的图与该快照进行比较,并比较差异......对我来说似乎不错。

3)自我跟踪实体:代码生成器生成用于在POCO对象内进行自我跟踪的逻辑。这似乎与我们现在所做的很接近,除非它是为我们生成的。

我想弄清楚所有这些方法之间的优缺点。我猜测1和2是“连接”的,并且他们需要最初查询POCO以保持实例化的ObjectContext,但是无法确认这一点。我也没有看到为什么有人会真的打扰选项1的原因,因为选项3似乎也做同样的事情......

快照对我来说似乎最简单,但如果这需要ObjectContext长时间保持打开状态,我不太确定......

我只是一名初级程序员,所以这里有任何建议,特别是关于Silverlight 3(我相信选项2和3适用于Silverlight 3,但2可能有问题)非常感谢。

2 个答案:

答案 0 :(得分:14)

使用选项3.自我跟踪实体,因为这是他们的设计目标。

“自我跟踪实体针对序列化方案进行了优化”

This post给出了一个很好的演示。

答案 1 :(得分:2)

其他两个选项仅在objectcontext出现时进行更改时才适用。你唯一的选择是STE。通过STE,实体可以跟踪自己的变化。将修改后的对象图发送到服务器后,您可以播放这些更改,如下所示。 db.Dustomers.ApplyChanges(客户); db.SaveChnages();

使用STE,您可以在类库项目中创建您的entiites,并在WCF客户端,silverlight客户端,asp.net和wpf之间共享它们。因此,这使您可以为各种客户端重用实体。