【问题标题】:Owned entities with collection relationships using entity framework core使用实体框架核心拥有集合关系的拥有实体
【发布时间】:2019-07-05 22:01:48
【问题描述】:

我正在尝试对以下类结构进行建模,其中 PersonDetails 是使用表拆分的拥有实体,即 db 架构中没有名为 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();
  }
}

此配置引发以下错误:

'不支持从 'Address' 到 'PersonDetails.Addresses' 的关系,因为拥有的实体类型 'PersonDetails' 不能位于非所有权关系的主体方。' p>

EF 核心是否支持此映射?我无法在文档中找到它,但也许我错过了。

如果不支持,有人知道是否有计划支持它吗?

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

【问题讨论】:

  • 您找到这个问题的答案或解决方法了吗?我有同样的情况。

标签: entity-framework-core


【解决方案1】:

设计不支持此功能。拥有的类型是聚合的一部分,只能从外部引用聚合根。

您仍然可以拥有相同的类并使用表拆分,只是不要将 PersonDetails 配置为拥有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 2020-07-08
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    相关资源
    最近更新 更多