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