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 中查找关键属性类型
使用实体框架 4.1 代码优先方法将一对一的表关系映射到单个实体