微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在 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 举报,一经查实,本站将立刻删除。