我正在与Entity Framework作斗争,因为我想从Item表和其他两个表Label
和ItemLabel
中选择与一个项目相关的所有内容。Item
和ItemLabel
表之间的关系是一对多。
我想写一个IEEE802.1方法来检索与一个项目相关的所有数据。但是,我不知道如何检索ItemLabel
表中的所有数据。
下面是我的schema:
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
表?我错过了什么?
1条答案
按热度按时间pb3skfrl1#
如果你要选择一个实体类型,你可以直接选择它--你不需要像现在这样构造一个对象。最简单的是
var itemList = content.T_item
,因为DbSet也是一个IE对象,但是下面的任何一个都可以工作:字符串
然后,您可以通过使用导航属性
var labels = itemList.First().Labels
访问每个Item
上的Labels
。这些集合是延迟加载的,因此这涉及到另一次数据库访问。将.Include("T_ItemLabel")
添加到context.T_item
以获取原始查询中的所有Labels
。