我的应用程序中有以下图层 日期层(参考模型) 业务层(参考模型,数据) 模型 服务(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
即使在很多地方搜索过,我也找不到合适的解决方案。 请帮忙,如果有任何想法...
...谢谢
创建我的应用程序所遵循的方法在链接
下面给出答案 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);
}