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