创建了多个“Object ChangeTracker”,可以避免吗?

时间:2010-12-28 11:51:03

标签: wpf wcf entity-framework-4

我们正在开发一个POC,我们有以下架构(MVVM),

WPF(客户端)+ WCF +模型(DataAccess)+ ADO.Net实体框架4.0(使用SQL Server 2008 R2作为数据库)

所有项目都不同。

在DataAccess层中,我们根据功能创建了不同的实体模型(edmx)。针对特定流程的表格被分组并创建不同的实体模型。我们使用自我跟踪实体来通过wcf服务与WPF客户端进行通信。对于单一型号,一切正常。但是当我们创建一个多模型时,很少有问题开始出现。多重模型具有很少的重复表/实体。两个问题是,

1)当我们尝试从不同模型访问实体时,会创建多个对象“ObjectChangeTracker”。  例如。   CompanyModel(edmx) - 公司(实体) - ObjectChangeTracker,ObjectState   ProductModel(edmx) - 客户(实体) - ObjectChangeTracker1,ObjectState1   OrderModel(edmx) - Oder(实体) - ObjectChangeTracker2,ObjectState2

有什么方法可以避免这种情况吗?

2)很少有表格可以在模型中共享,例如。公司(实体)用于以上所有的门户。在编译期间,它不会产生任何错误。但运行时它给错误说“指定的模式无效。错误:CLR类型到EDM类型的映射是不明确的,因为多个CLR类型匹配EDM类型”公司“”..为了解决这个问题,我们用一些重命名实体前缀使他们独特。有没有其他方法可以在不更改同一程序集中的实体名称的情况下解决此问题?

提前致谢,并感谢任何人有解决这些问题的方法。

谢谢, 基兰

1 个答案:

答案 0 :(得分:0)

1)当您从数据访问中获取实体时,是否始终启用ChangeTracker? 我想除非你使用POCO模板,否则无法避免创建的内容。在某些事情上还有一些工作要做,但你会有更轻的物体。然后,您必须自己管理实体状态。我认为保持selftracking是好的,但是当你使用WCF时,你应该将集合类型改为FixUpCollection,因为我记得能够更好地使用你的WCF服务。提示:不要忘记禁用延迟加载,否则您将最终获得当前序列化实体时您不想要的所有子记录。

2)尝试在不同的组件中分离模型,这是一种更好的实践,我认为你将克服这些问题。我按照这种方式工作,没问题。

希望我帮助....