【发布时间】:2010-05-18 12:19:23
【问题描述】:
我几乎是 Entity Framework(特别是第 4 版)的新手,我正在尝试了解我遇到的问题。
我有一个与 Entity Framework 4 和一个 Repository 类一起使用的 ASP.NET MVC2 项目。我已经定义了一个简单的外键关系。当我运行我的 MVC 项目时,我可以通过在我的实体上设置外键 ID 来加载 MVC 表单并更新外键关系。我通过在部分类中调用 OnPropertyIDChanging 并像这样设置 EntityKey 来做到这一点
this.ManufacturerReference.EntityKey = new System.Data.EntityKey("MachinesEntities.Manufacturers", "ManufacturerId", value);
我创建了第二个项目,它是一个命令行项目,用于加载模型的初始数据。但是,当我调用 Repository 对象以添加实体时,我得到一个无法将 Null 值插入子实体表(制造商)。如果我在父对象(产品)上显式设置对子对象(制造商)的引用,调用我的存储库以获取制造商对象并设置产品的制造商对象,我会得到一个异常声明
无法引用实体对象 通过多个实例 IEntityChangeTracker
我假设这是因为在我的每个存储库对象上都有一个对实体上下文的全局引用,因此我有一个制造商和产品的开放上下文。
在进行一些研究时,我发现通过从查询中加载对象,对象关系是通过 RelationshipEntry 对象显式创建的。当我在命令行应用程序中创建对象时,不会发生这种情况。解决这个问题的方法是什么?我假设如果我尝试创建 Web 服务,我会遇到同样的问题,因为我是在没有先调用 SQL 的情况下创建对象的。
其次,是否有管理上下文的最佳实践?是在每个存储库方法中创建和处理上下文、每个存储库对象中的全局引用还是传递给每个存储库构造函数的上下文更好?
谢谢!
约翰
【问题讨论】:
标签: .net entity-framework .net-4.0 entity-relationship entity-framework-4