1

我有一个模型:

public class Foo
{
    public virtual Bar Bar1 { get; set; }
    public virtual Bar Bar2 { get; set; }
}

public class Bar
{
    public virtual Foo Foo { get; set; }
}

Bar1 和 Bar2 是可选的,但所有 Bar 都需要 Foo。Foos 表上有一个 Bar1_Id 列和 Bar2_Id 列。

我试过这个配置:

modelBuilder
    .Entity<Foo>()
    .HasOptional(x => x.Bar1);

modelBuilder
    .Entity<Foo>()
    .HasOptional(x => x.Bar2);

modelBuilder
    .Entity<Bar>()
    .HasRequired(x => x.Foo);

这产生了一个试图将 Foo_Id 添加到 Bars 表的迁移:

AddColumn("dbo.Bars", "Foo_Id", c => c.Guid(nullable: false));
CreateIndex("dbo.Bars", "Foo_Id");
AddForeignKey("dbo.Bars", "Foo_Id", "dbo.Foos", "Id", cascadeDelete: true);

这不是我想要的,所以我尝试从迁移中删除这些行并运行在尝试加载 Bar 时当然会产生错误的代码:

列名“Foo_Id”无效。

然后我尝试了这个配置:

modelBuilder
    .Entity<Foo>()
    .HasOptional(x => x.Bar1)
    .WithRequired(x => x.Foo);

modelBuilder
    .Entity<Foo>()
    .HasOptional(x => x.Bar2)
    .WithRequired(x => x.Foo);

迁移时产生此错误:

System.Data.Entity.Core.MetadataException:指定的架构无效。错误:未加载关系“Test.Foo_Bar1”,因为“Test.Bars”类型不可用。

我在其他地方有这种关系,但在实体上有两个相同类型的地方没有。这是 EF6 的已知限制吗?

4

0 回答 0