问题描述
我正在尝试将拥有的实体类型用于具有相同类型的嵌套 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 (将#修改为@)