首页 文章

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

提问于
浏览
4

我首先使用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 表 .

UPDATE

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

1 回答

  • 5

    您正在使用所谓的有界上下文 . 这种情况的好处以及如何使用它们在_2800040中进行了解释 .

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

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

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

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

    UPDATE

    在EF6中,您可以将多个上下文用于一个迁移路径 . 见this walkthrough .

相关问题