一对一关系,一侧没有引用属性

Wil*_*een 3 c# entity-framework-core

我有以下构造;具有地址(ownsone、子实体)和国家/地区地址(hasone、一对一)的人

public class Person
{
     public Guid Id {get; set;}
     public string Name {get; set;}
     public Address Address {get; set;}
}

public class Address 
{
     public Guid Id {get; set;}
     public Guid CountryId {get; set;}
     public Country Country {get; set;}
}

public class Country
{
     public Guid Id {get; set;}
     public string CountryCode {get; set;}
}

public class EntityConfiguration<Person> where Person : class
{
     public void Configure(EntityBuilder<Person> builder)
     {
         builder.OwnsOne(p => p.Address, addressBuilder => 
         addressBuilder.HasOne(address => address.Country).WithOne();
     }
}
Run Code Online (Sandbox Code Playgroud)

当我运行 Add-Migration 时,我会为拥有一个地址的每个实体获取一段代码。具有自动生成的密钥等。但我想用HasForeignKey明确指定关系。这个怎么做?

Iva*_*oev 6

EF Core 为一对一关系提供 2 个流畅的 API -HasForeignKeyHasPrincipalKey.

与一对多 API 的主要区别在于,您需要显式提供泛型类型参数,因为关系的主体和依赖端无法通过HasOne/WithOne调用确定(对于一对多,一始终是委托人和许多人是受抚养人)。在这种情况下,导航属性并不重要:

addressBuilder.HasOne(address => address.Country)
   .WithOne()
   .HasForeignKey<Address>(address => address.CountryId)
Run Code Online (Sandbox Code Playgroud)

参考:关系