У меня есть следующие таблицы, которые я хочу сопоставить с EF 4.1 Code First:
Предметы - Предмет, который может иметь несколько категорий
ItemCategories - таблица отношений для сопоставления отношений «многие ко многим» элементов <-> категорий
Категория - Категория, категории - это дерево категорий, ParentId является собственной ссылкой
CategoryLink - эта таблица содержит края дерева
Вопрос в том, как создать первое сопоставление кода EF для моих классов сущностей, чтобы я мог использовать свойство коллекции Categories в Item, имея возможность использовать все свои таблицы внутри запроса (особенно соединение по таблице отношений) как это:
//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; }
}
Спасибо