簡體   English   中英

具有使用實體框架核心的集合關系的擁有實體

[英]Owned entities with collection relationships using entity framework core

我正在嘗試使用表拆分為以下類結構建模,其中PersonDetails是擁有實體,即,在數據庫架構中沒有名為PersonDetails

我正在使用實體框架核心2.2

public class Person
{
  public long Id { get; set; }
  public PersonDetails Details { get; set; }
}

public class PersonDetails
{
  public IReadOnlyCollection<Address> Addresses { get; set; }
  public IReadOnlyCollection<Contact> Contacts { get; set; }
}

public class Address
{
  public string Street { get; set; }
  public string Suburb { get; set; }
}

public class Contact
{
  public string PhoneNumber { get; set; }
  public string EmailAddress { get; set; }
}

實體類型映射如下所示:

public class PersonTypeConfiguration : IEntityTypeConfiguration<Person>
{
  public void Configure(EntityTypeBuilder<Person> builder)
  {
    builder.Property(p => p.Id).ValueGeneratedOnAdd();
    builder.OwnsOne(p => p.Details, b =>
    {
      b.HasMany(p => p.Addresses).WithOne().OnDelete(DeleteBehavior.Cascade);
      b.HasMany(p => p.Contacts).WithOne().OnDelete(DeleteBehavior.Cascade);
    });
  }
}

public class AddressTypeConfiguration : IEntityTypeConfiguration<Address>
{
  public void Configure(EntityTypeBuilder<Address> builder)
  {
    builder.Property<string>("Id").ValueGeneratedOnAdd();
  }
}

public class ContactTypeConfiguration : IEntityTypeConfiguration<Contact>
{
  public void Configure(EntityTypeBuilder<Contact> builder)
  {
    builder.Property<int>("Id").ValueGeneratedOnAdd();
  }
}

此配置引發以下錯誤:

不支持“從'地址'到'PersonDetails.Addresses'的關系,因為擁有實體類型'PersonDetails'不能位於非所有權關系的主體上。”

EF核心支持此映射嗎? 我無法在文檔中找到它,但也許我錯過了。

如果不支持,是否有人計划支持它?

完整的示例可以在這里找到https://github.com/RossJayJones/entity-framework-core-samples

設計不支持此功能。 擁有的類型是聚合的一部分,並且只能從外部引用聚合根。

您仍然可以擁有相同的類並使用表拆分,只是不要將PersonDetails配置為擁有。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM