我正在努力使用Entity Framework,因为我想选择与Item表中的一个项目相关的所有内容以及另外两个表Label和ItemLabel。 Item和ItemLabel表之间的关系是一对多。
我想编写IEnumberable List方法,它将检索与项目相关的所有数据。但是,我不知道如何检索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;
}
请注意我使用的是Database First方法。
所以你能否告诉我如何获得与Item表中每个项目相关的所有标签?我错过了什么吗?
答案 0 :(得分:0)
如果您正在选择实体类型,则可以选择它 - 您不必构建像您一样的对象。最简单的是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
。