gpt4 book ai didi

entity-framework - 如何使用 EF Code First 将一个表关联到多个父项

转载 作者:行者123 更新时间:2023-12-01 12:50:21 24 4
gpt4 key购买 nike

我正在构建一个域模型,它需要多个表才能被多个可能的父表引用。像您这样的东西可能有一个表来存储笔记或文件,并且这些笔记和/或文件可以与不同的父实体相关联。并不是说同一个"file"或“注释”可以与多个所有者相关联,而是"file"表中的 10 行,其中 3 行可能属于“客户”表中的行,其中 3 行可能是归“Orders”表中的行所有,其中 4 个可能归“Person”表中的行所有。

拥有的表都具有子表的虚拟 ICollection。

当我通过初始迁移的代码优先迁移运行我的模型并查看生成的流畅代码时,这些表的表定义包含多个引用回源表的 id 列,因此会有“customer_id”、“person_id”等列(每个可能的“拥有实体”。这似乎不太“正确”。有没有更好的方法在 EF 中使用 CodeFirst 对其进行建模?就像能够使用提供有关拥有实体的“提示”的子表中的鉴别器列?

谢谢,-B先生

最佳答案

如果您在笔记和所有可以有笔记的实体之间创建多对多关系,您将有一个用于每个拥有类型的联结表和一个漂亮干净的笔记表。创建多对多关系的最简单方法是覆盖 DbContext.OnModelCreating 方法。

您的 DbContext:

  public class MyDatabase : DbContext
{
// Protected methods

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);

modelBuilder.Entity<Customer>().HasMany(x => x.Notes).WithMany();
modelBuilder.Entity<Order>().HasMany(x => x.Notes).WithMany();
}

public MyDatabase() : base("MyDatabase")
{
}

// Properties

public DbSet<Customer> Customers { get; set; }

public DbSet<Order> Orders { get; set; }

public DbSet<Note> Notes { get; set; }
}

这将生成以下表格:CustomerOrdersNotesCustomerNotesOrderNotes 最后两个是联结表,每个只有两列。

注意!使用此解决方案,实体也可以共享笔记,例如客户和订单可以拥有相同的注释。

关于entity-framework - 如何使用 EF Code First 将一个表关联到多个父项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12961148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com