我首先使用VS 2010和Entity Framework代码(版本6)。我在它自己的上下文中有两个实体,我想在它们之间创建一对多的关系。
上下文1具有以下实体:
public class MyTrust
{
public int MyTrustID { get; set; }
public string MyTrustName { get; set; }
}
和Context 2具有以下实体:
public class MyLocation
{
public int MyLocationID { get; set; }
public int MyTrustID { get; set; }
public virtual MyTrust MyTrust { get; set; }
}
使用以下Fluent API
modelBuilder.Entity<MyLocation>()
.HasRequired(m => m.MyTrust);
Context 2的迁移文件包含正确的密钥,但也为MyTrust
创建了一个已存在于其他上下文中的新表。
我知道我可以编辑迁移文件,但这不是解决方案。
我的问题是,如何停止创建第二个MyTrust
表。
更新
上面有一个重大缺陷,我将错误的代码粘贴到Context 2中。现在纠正了。道歉。
答案 0 :(得分:5)
您正在使用所谓的有界上下文。这些上下文的好处以及如何使用它们在blog by Julie Lerman中进行了解释。
您遇到的问题是,在迁移过程中没有任何上下文可用于此部分:
如果您正在进行新的开发,并且希望让Code First根据您的类创建或迁移您的数据库,则需要使用包含所有类和关系的DbContext创建“超级模型”需要构建一个代表数据库的完整模型。
请注意,如果您遵守这些规则,则可以在所有上下文之间共享MyTrust
类型(来自Lerman&amp; Miller的书 DbContext ,第233页):
- 实体一次只能附加到一个上下文。这种架构有效 最好使用短期上下文,其中要共享的实例将是完全的 在与另一个背景相关联之前,它与一个背景脱离关联。
- 附加到不同上下文的实体不能相互连接。
<强>更新强>
在EF6中,您可以将多个上下文用于一个迁移路径。请参阅this walkthrough。