我正在努力使用实体框架,因为我想从项目表和其他两个表
Label
和ItemLabel
中选择与一项相关的所有内容。 Item
和 ItemLabel
表之间的关系是一对多。
我想编写一个 IEnumerable 方法来检索与某个项目相关的所有数据。但是,我不知道如何检索
ItemLabel
表中的所有数据。
这是我的架构:
Item Table: ItemId, Title, Description
Label Table: LabelId, Title
ItemLabel Table: ItemLabelId, ItemId, LabelId, Description
这是我在数据访问层中的 Item 类
public int ItemId { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public IEnumerable<Item> GetItems(Item itemObj)
{
List<Item> itemList = new List<Item>();
using (TestEntities context = new TestEntities())
{
itemList = (from item in context.T_Item
select new Item()
{
ItemId = item.IdeaId,
Title = item.Title,
Description = item.Description,
Labels = item.T_ItemLabel.FirstOrDefault(), <<<<<< Error
}).ToList();
}
return itemList;
}
请注意,我使用的是数据库优先的方法。
那么您能否告诉我如何获取与
Item
表中每个项目相关的所有标签?我错过了什么吗?
如果您正在选择实体类型,则只需选择它即可 - 您不必像您正在做的那样构造对象。最简单的是
var itemList = content.T_item
,因为 DbSet 也是一个 IEnumerable,但以下任一方法都可以:
var itemList = (from item in context.T_Item select item);
var itemList = context.T_item.Select(item => item);
然后,您只需使用导航属性:
Labels
即可访问每个 Item
上的 var labels = itemList.First().Labels
。这些集合是延迟加载的,因此这涉及到另一次数据库访问。将 .Include("T_ItemLabel")
添加到 context.T_item
以获取原始查询中的所有 Labels
。