如何在N-Tier架构中通过wcf检测ObservableCollection中已更改的poco实体?

时间:2013-12-03 11:26:32

标签: c# wpf wcf entity-framework n-tier-architecture

我的应用程序中有以下图层 日期层(参考模型) 业务层(参考模型,数据) 模型 服务(WCF) - (对模型,业务层的引用) UI(WPF / Silver Light) - 通过WCF服务连接

如何检测UI层中ObservableCollection中已更改的poco实体? 从客户端发送回服务器进行保存?而不是将所有数据发送回服务器端(通过WCF)?

如何对UI层中集合中的实体执行添加/删除/更新操作?

我正在使用 VS2010 / 2012 C# EF 5 支持WCF的ADO.NET POCOEntityGenerator(用于从Model.edmx生成.tt模板) SQL Server 2012

即使在很多地方搜索过,我也找不到合适的解决方案。 请帮忙,如果有任何想法...

...谢谢

创建我的应用程序所遵循的方法在链接

下面给出

http://www.toplinestrategies.com/dotneters/net/wcf-entity-framework-and-n-tier-solutions-part-2/?lang=en/comment-page-1/#comment-1954

3 个答案:

答案 0 :(得分:0)

只有正确的解决方案是手动进行更改跟踪。每个POCO对象都有IsDirty属性,该对象的每个属性在其setter中都有IsDirty = true

减少手动操作的一种方法是创建一个框架,它将创建包装类,为您完成此操作,但这需要大量的反射和代码生成。此外,它仍然需要将所有属性定义为虚拟。

但一般来说,您希望避免制作需要此类跟踪的UI。如果要更改实体,请在“编辑”窗口中仅加载该实体。

答案 1 :(得分:0)

POCO非常适合在客户端和服务器之间传输数据。但是,如果您正在寻找在客户端和/或服务器端实际使用的对象,您可能需要考虑使用自跟踪实体(STE),因为这些实体包含跟踪其实际更改和状态的逻辑。

更好的解决方案是使用N层实体框架,该框架提供在n层应用程序中使用EF的功能。有关详细信息,请参阅http://ntieref.codeplex.com/

答案 2 :(得分:-1)

如果您使用EF,那么您的实体在提交对您的上下文的更改之前可以测试“HasChanges”标记。 e.g。

if (this.CurrentEntity.HasChanges || CurrentEntity.EntityState == EntityState.New)
{
this.SubjectContext.SubmitChanges(Submit_Completed, saveDetails);
}