如何在 EF Core 5 Fluent API 中配置具有继承关系的值对象

问题描述

我有一个带有聚合 A 的 DDD 项目,它有一个实体列表属性 List,并且实体 B 中有一个值对象 C,代码如下:

public class A
{
    public Guid Id {get; protected set;}
    public List<B> Bs {get; protected set;}
}

public class B
{
    public Guid Id {get; protected set;}
    public C C {get; protected set;}
}

public record C{}
public record C1:C{}
PUBLIC record C2:C{}

因为类型 C 有子类,所以在 Fluent API 中我是这样配置的:

public AClasstypeConfiguration : IEntityTypeConfiguration<A>
{
    public void Configure(EntityTypeBuilder<A> builder)
    {
        builder.HasKey(p => p.Id);
        builder.OwnsMany(p => p.Bs,p =>
        {
            p.HasKey(g => g.Id);
            p.Property(g => g.Id).ValueGeneratednever();
            p.HasOne(g => g.C);
        });
    }
}

public cclasstypeConfiguration : IEntityTypeConfiguration<C>
{
    public void Configure(EntityTypeBuilder<C> builder)
    {
        builder.HasNoKey();
        builder.Hasdiscriminator<int>("SubType")
            .HasValue<C1>(1);
            .HasValue<C2>(2);
    }
}

但是,当我调试代码时,它会抛出一个 InvalidOperationException 并带有消息“无法确定由类型 'C' 的导航 'BC' 表示的关系。要么手动配置该关系,要么使用 '[NotMapped]' 忽略此属性属性或通过在 'OnModelCreating' 中使用 'EntityTypeBuilder.Ignore'。"

那么如何在 EF Core 5 Fluent API 中配置具有继承关系的值对象?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)