实体框架中实体上同一类型的多个一对一关系

时间:2015-06-26 18:45:25

标签: c# entity-framework fluent-entity-framework

我有一个模特:

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是可选的,但所有Bars都需要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时产生错误:

  

列名称无效&#39; Foo_Id&#39;。

然后我尝试了这个配置:

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:指定的架构不是   有效。错误:关系&#39; Test.Foo_Bar1&#39;没装,因为   类型&#39; Test.Bars&#39;不可用。

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

0 个答案:

没有答案