我有一个模特:
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的已知限制吗?