跨多个上下文的实体框架,代码优先和一对多关系

Pet*_*ith 4 entity-framework code-first ef-migrations

我首先使用VS 2010和Entity Framework代码(版本6).我在它自己的上下文中有两个实体,我想在它们之间创建一对多的关系.

上下文1具有以下实体:

public class MyTrust
{
    public int MyTrustID { get; set; }
    public string MyTrustName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和Context 2具有以下实体:

public class MyLocation
{
    public int MyLocationID { get; set; }
    public int MyTrustID { get; set; }
    public virtual MyTrust MyTrust { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用以下Fluent API

modelBuilder.Entity<MyLocation>()
    .HasRequired(m => m.MyTrust);
Run Code Online (Sandbox Code Playgroud)

Context 2的迁移文件包含正确的密钥,但也创建了一个MyTrust已存在于其他上下文中的新表.

我知道我可以编辑迁移文件,但这不是解决方案.

我的问题是,如何停止创建第二个MyTrust表.

UPDATE

上面有一个重大缺陷,我将错误的代码粘贴到Context 2中.现在纠正了.道歉.

Ger*_*old 5

您正在使用所谓的有界上下文.Julie Lerman博客中解释了这些背景的好处以及如何使用它们.

您遇到的问题是,在迁移过程中没有任何上下文可用于此部分:

如果您正在进行新的开发,并且希望让Code First根据您的类创建或迁移您的数据库,则需要使用包含构建所需的所有类和关系的DbContext创建"超级模型"表示数据库的完整模型.

请注意MyTrust,如果遵守这些规则,您可以在所有上下文之间共享类型(来自Lerman&Miller的书DbContext,第233页):

  • 实体一次只能附加到一个上下文.此体系结构最适用于短期上下文,其中要共享的实例在将一个上下文附加到另一个上下文之前将完全取消关联.
  • 附加到不同上下文的实体不能彼此附加.

UPDATE

在EF6中,您可以将多个上下文用于一个迁移路径.请参阅此演练.