首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何首先使用EF Code将一个表关联到多个父表

如何首先使用EF Code将一个表关联到多个父表
EN

Stack Overflow用户
提问于 2012-10-19 02:19:02
回答 2查看 1.4K关注 0票数 3

我正在构建一个域模型,它要求多个表能够被多个可能的父表引用。您可能有一个表来存储注释或文件,这些注释和/或文件可以与不同的父实体相关联。并不是说同一个"file“或"note”可以与多个所有者相关联,而是"files“表中的10行,其中3行可能归"Customer”表中的行所有,3行可能归"Orders“表中的行所有,4行可能归"Person”表中的行所有。

所属表都有子表的虚拟ICollections。

当我为初始迁移运行代码优先迁移模型并查看生成的流畅代码时,这些表的表定义包括多个id列,这些列引用回源表,因此将有一个列"customer_id“、"person_id”等(每个可能的“拥有实体”对应一个列。这看起来不太“正确”。有没有更好的方法用CodeFirst在EF中对此进行建模?比如能够使用子表中的鉴别器列来提供有关所属实体的“提示”?

谢谢,-MrB

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-21 03:30:52

如果在注解和所有可以具有注解的实体之间创建多对多关系,则每个拥有类型都将有一个连接表和一个简洁的注释表。创建多对多关系的最简单方法是覆盖DbContext.OnModelCreating方法。

您的DbContext:

代码语言:javascript
运行
复制
  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,最后两个是连接表,每个表只有两列。

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

票数 4
EN

Stack Overflow用户

发布于 2012-10-21 03:06:40

不确定是否合适,但您可以使用EF层次结构来实现。请参阅本文:

http://weblogs.asp.net/manavi/archive/2010/12/24/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-1-table-per-hierarchy-tph.aspx

基本上,你的笔记可以有三种类型,它们都继承自一个基本的笔记类型。

EF中有三种层次结构,所以这篇文章分为三部分……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12961148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档