【发布时间】: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; }
}
谢谢
【问题讨论】:
标签: join entity-framework-4.1 ef-code-first