繁体   English   中英

Entity Framework Core 2.2 中的一对一或零映射

[英]One to one or zero mapping in Entity Framework Core 2.2

我有一系列与父 model 相关的模型,并且该系列模型有一个与原始父相关的子表,因此:

Public Class A
{
    [Key]
    public long AId {get; set;}
    public string Name {get; set;}
}

Public Class B1
{
    [Key]
    public long Id {get; set;}
    [ForeignKey("AId")]
    public virtual A a {get;set;}
    public virtual ICollection<C> Cs {get;set}
}

Public Class B2
{
    [Key]
    public long AId {get; set;}
    [ForeignKey("AId")]
    public virtual A a {get;set;}
    public virtual ICollection<C> Cs {get;set}
}

Public Class C
{
    public long CId {get; set;}
    public long AId {get; set;}
    [ForeignKey("AId")]
    public virtual A a {get;set;}
}

ApplicationDBContext 将一对一/零实体与流畅的 api 联系在一起,但我不知道如何联系 c。 上下文如下所示:

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
    {
    }

    public DbSet<A> As { get; set; }
    public DbSet<B1> B1s { get; set; }
    public DbSet<B2> B2s { get; set; }
    public DbSet<C> Cs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<B1>().HasOne(x => x.a).WithOne().HasForeignKey<A>(p => p.Id);
    }

我想将 C 与这样的东西联系起来:

modelBuilder.Entity<B1>().HasMany(x => x.Cs).WithOne(y => y.a); 

但它不喜欢这样,因为它引用了父表 A,这是我想要它做的。 这是我第一次尝试使用 Core,但我没有找到将 3 个表与流利的 api 联系在一起的方法。 我能够在 EF 4.6 中做到这一点,所以我假设这在 Core 中应该是可能的。

任何帮助,将不胜感激。

我想到了....

modelBuilder.Entity<B1>().HasMany(x => x.Cs).WithOne().HasForeignKey(y => y.AId); 

希望这可以帮助其他人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM