C# 零对一,只有一个外键映射
我有两节课C# 零对一,只有一个外键映射,c#,entity-framework,entity-relationship,fluent,C#,Entity Framework,Entity Relationship,Fluent,我有两节课 public class Foo { public int FooId {get;set;} public virtual Bar Bar {get;set;} } public class Bar { public int BarId {get;set;} public int? FooId {get;set;} public virtual Foo Foo {get;set;} } 我正在使用实体框架的fluent映射。如何将Foo和B
public class Foo
{
public int FooId {get;set;}
public virtual Bar Bar {get;set;}
}
public class Bar
{
public int BarId {get;set;}
public int? FooId {get;set;}
public virtual Foo Foo {get;set;}
}
我正在使用实体框架的fluent映射。如何将Foo和Bar映射在一起,以便:
一个条和一个或零个foo
一个foo和一个或零个bar
我认为这是第三范式的正确模式。如果Foo有一个BarId外键,我知道怎么做,但事实并非如此。要执行您要求的操作,您需要配置两个不同的单向关系:
modelBuilder.Entity<Foo>()
.HasOptional(s => s.Bar)
.WithMany();
modelBuilder.Entity<Bar>()
.HasOptional(s => s.Foo)
.WithMany()
.HasForeignKey(s => s.FooId);
modelBuilder.Entity()
.has可选(s=>s.Bar)
.有许多();
modelBuilder.Entity()
.has可选(s=>s.Foo)
.有很多
.HasForeignKey(s=>s.FooId);
您首先需要知道这个实体中的哪个是主体,哪个是从属。在这种情况下,两者都是同等主体,都可以在没有其他主体的情况下存在。规则是在一侧有一个主体:然后,您需要配置为两个独立的关系。正如@codenotfind指出的,一对一的关系,一个是主体关系,另一个是从属关系,两者共享相同的PK