EF 4.1 复杂关系的实体映射

Posted

技术标签:

【中文标题】EF 4.1 复杂关系的实体映射【英文标题】:EF 4.1 Entity mappings for complex relations 【发布时间】:2011-06-16 00:06:00 【问题描述】:

我想用 EF 4.1 Code First 映射以下表格:

项目 - 可以有多个类别的项目

ItemCategories - 映射Items多对多关系的关系表Categories

Category - 一个类别,类别是类别树,ParentId 是自引用的

CategoryLink - 此表包含树的边缘


问题是如何为我的实体类创建 EF 代码优先映射,以便我可以使用 Item 上的 Categories 集合属性,同时能够在查询中使用我的所有表(尤其是关系表的联接)像这样:

//searchIds contains a list of category guids to be searched for inside the category tree
var query = from item in db.Items
            join itemCategory in db.ItemCategories on item.Id equals itemCategory.ItemId
            join category in db.Categories on itemCategory.CategoryId equals category.Id
            join categoryLink in db.CategoryLinks on category.Id equals categoryLink.ChildId
            where searchIds.Contains(categoryLink.ParentId)
            select item;

这里是带有 DbContext 的实体类(没有映射)

class TestContext : DbContext

    public DbSet<Category> Categories  get; set; 
    public DbSet<Item> Items  get; set; 
    public DbSet<ItemCategory> ItemCategories  get; set; 
    public DbSet<CategoryLink> CategoryLinks  get; set; 


public class Item

    public Guid Id  get; set; 
    public string Name  get; set; 

    public virtual ICollection<Category> Categories  get; set; 


public class ItemCategory

    public Guid ItemId  get; set; 
    public Guid CategoryId  get; set; 


public class Category

    public Guid Id  get; set; 

    public Guid? ParentId  get; set; 
    public virtual Category Parent  get; set; 

    public string Name  get; set; 


public class CategoryLink

    public Guid ParentId  get; set; 
    public Guid ChildId  get; set; 

    public virtual Category Parent  get; set; 
    public virtual Category Child  get; set; 

谢谢

【问题讨论】:

【参考方案1】:

我只是先玩了一点代码,不确定这是否有帮助。但下面的帖子显示了如何创建桥接表并首先解决 EF4.1 代码的多对多问题。

How to perform CRUD with Entity Framework Code-First?

还有 Forcing a bridge/join table to become a many to many relationship in EF4

【讨论】:

这些帖子都不是关于我问的主题的。第二个甚至与代码无关。我遇到的问题是如何显式映射关系表(以便能够与其连接,同时仍然能够将 ICollection 引用映射到 Item 上)。

以上是关于EF 4.1 复杂关系的实体映射的主要内容,如果未能解决你的问题,请参考以下文章

EF 4.1:使用 Fluent 映射从 Code First 中查找关键属性类型

EF实体框架之CodeFirst六

使用实体框架 4.1 代码优先方法将一对一的表关系映射到单个实体

EF使用EntityTypeConfiguration配置映射关系

EF Core对象关系映射多种方法

EF CORE中复杂类型的映射