Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 实体框架、代码优先和跨多个上下文的一对多关系_Entity Framework_Code First_Entity Framework Migrations - Fatal编程技术网

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

Entity framework 实体框架、代码优先和跨多个上下文的一对多关系,entity-framework,code-first,entity-framework-migrations,Entity Framework,Code First,Entity Framework Migrations,我首先使用VS2010和实体框架代码(版本6)。我在各自的上下文中有两个实体,我想在它们之间创建一对多的关系 上下文1具有以下实体: public class MyTrust { public int MyTrustID { get; set; } public string MyTrustName { get; set; } } public class MyLocation { public int MyLocationID { get; set; } pu

我首先使用VS2010和实体框架代码(版本6)。我在各自的上下文中有两个实体,我想在它们之间创建一对多的关系

上下文1具有以下实体:

public class MyTrust
{
    public int MyTrustID { get; set; }
    public string MyTrustName { get; set; }
}
public class MyLocation
{
    public int MyLocationID { get; set; }
    public int MyTrustID { get; set; }
    public virtual MyTrust MyTrust { get; set; }
}
上下文2具有以下实体:

public class MyTrust
{
    public int MyTrustID { get; set; }
    public string MyTrustName { get; set; }
}
public class MyLocation
{
    public int MyLocationID { get; set; }
    public int MyTrustID { get; set; }
    public virtual MyTrust MyTrust { get; set; }
}
使用以下fluentapi

modelBuilder.Entity<MyLocation>()
    .HasRequired(m => m.MyTrust);
modelBuilder.Entity()
.HasRequired(m=>m.MyTrust);
上下文2的迁移文件包含正确的键,但也为另一个上下文中已经存在的
MyTrust
创建了一个新表

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

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

更新


上面有一个主要缺陷,我将错误的代码粘贴到上下文2中。现在更正。抱歉。

您正在处理所谓的有界上下文。本文解释了这种环境的好处以及如何使用它们

您遇到的问题(没有一个上下文可用于迁移)将在本部分中解决:

如果您正在进行新的开发,并且希望让代码首先基于类创建或迁移数据库,则需要使用DbContext创建一个“uber模型”,其中包含构建表示数据库的完整模型所需的所有类和关系

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

  • 一个实体一次只能附加到一个上下文。这种架构很有效 最好使用短期上下文,其中要共享的实例将完全 在一个上下文附加到另一个上下文之前,先将其与该上下文解除关联
  • 附加到不同上下文的实体不能相互附加
更新


在EF6中,一条迁移路径可以使用多个上下文。请参阅。

谢谢格特。问题中有一个重大错误,现已更正。这会影响你的答案吗?不会。在迁移过程中,您始终需要这种“uber上下文”。所有上下文仍将包含
MyTrust
类型,因此共享部分仍然适用。Context2必须包含它,否则您无法定义关联。@GertArnold没有用另一种方式解决此问题,这意味着您不需要ubercontext@Colin这是关于在不同的数据库模式中使用不同的模型。但是这里至少有一个实体在上下文之间共享,所以它在同一个模式中。AFAIK,EF不支持(也没有任何计划)将上下文“合并”到一个数据库模式中。@GertArnold Gert-感谢您的帮助和澄清。我可以提出补充质询吗。是否可以跨不同项目中的实体创建外键,从而创建不同的数据库?谢谢