4

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

上下文 1 具有以下实体:

public class MyTrust
{
    public int MyTrustID { get; set; }
    public string MyTrustName { get; set; }
}

上下文 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);

上下文 2 的迁移文件包含正确的键,但也会创建一个新表,MyTrust该表已存在于其他上下文中。

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

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

更新

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

4

1 回答 1

5

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

您遇到的问题,任何上下文都不能在迁移中使用,在这一部分中得到解决:

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

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

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

更新

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

于 2013-09-18T20:42:37.117 回答