如何使用实体框架从具有一对多关系的两个表中选择所有相关数据?

问题描述 投票:0回答:1

我正在努力使用实体框架,因为我想从项目表和其他两个表

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
表中每个项目相关的所有标签?我错过了什么吗?

c# asp.net entity-framework
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.