EF Code First - 为嵌套的 OwnsMany 映射重用表

问题描述

我正在尝试将拥有的实体类型用于具有相同类型的嵌套 OwnsOne->OwnsMany 关系的模型,如下面的代码所述。我可以为有效的标识符创建单独的表('Parent_Foo_Identifiers' + 'Parent_Bar_Identifiers'),但是有没有办法对此进行建模,以便对所有标识符使用相同的表(例如“Parent_Child_Identifiers”)?

对于使用多个表的 2 个属性似乎可以接受,但是如果我添加一个 Child Baz 那么我需要另一个表等...

我尝试将认值为“Foo”|“Bar”的属性添加到 Identifiers 并在 PK 中使用它作为鉴别器,但 EFCore 无法识别我尝试的配置。

使用单独的表格实现:

型号: 父级总是有一个 Foo。父母可能有一个酒吧。没有父级,Foo/Bar + 相关标识符就不存在。标识符对 Parent.[Foo|Bar] + Key 来说是唯一的,例如对于给定的 Parent.Id,Foo 和 Bar 可能都有一个带键“abc”的标识符,但每个都只有一个“abc”条目。

public class Parent
{
    public Guid Id { get; set; }
    public Child Foo { get; set; }
    public Child? Bar { get; set; }
}

public class Child
{
    public List<Identifier> Identifiers { get; set; }
}

public class Identifier
{
    public string Key { get; set; }
    public string Value { get; set; }
}

数据库上下文:

public class MyContext: DbContext
{
    internal DbSet<Parent> Parents { get; set; }

    public MyContext(DbContextOptions<MyContext> options): base(options) { }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Parent>().HasKey(p => p.Id);

        modelBuilder.Entity<Parent>().OwnsOne(p => p.Foo,foo =>
        {
            foo.OwnsMany<Identifier>(f => f.Identifiers,m =>
            {
                m.WithOwner().HasForeignKey("Id");
                m.HasKey("Id","Key");
                m.ToTable("Parent_Foo_Identifiers");
            });
        });

        modelBuilder.Entity<Parent>().OwnsOne(p => p.Bar,bar =>
        {
            bar.OwnsMany<Identifier>(f => f.Identifiers,"Key");
                m.ToTable("Parent_Bar_Identifiers");
            });
        });
    }
}

解决方法

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

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

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