在EF

时间:2015-10-07 18:09:34

标签: entity-framework

我是Entity框架的新手,努力做到正确。 我有sql server三个表,

  • 第一个表包含父对象的详细信息
  • 第二个表包含Child 对象的细节
  • 第3个表有2列Parent_Id和Child_Id,用于 作为父母的映射可以有多个孩子。

我正在使用数据库第一种方法和实体框架5.生成的DbContext只有2个类(映射表没有对应的类)。

父类有ICollection<Child>,子类有ICollection<Parent>

如果我使用

,我想获得基于父ID的子对象列表
context.Parent
       .Include(f => f.Child)   
       .FirstOrDefault(f => f.ParentId == RequiredParentId)

其中RequiredParentId是我的过滤器。这给了我父对象,但是我想只检索Parent中的子列表。如果我将其更改为

context.Parent
       .Include(f => f.Child)   
       .FirstOrDefault(f => f.ParentId == RequiredParentId)
       .Child

然后如果父级不在数据库中,则“.Child”将抛出异常。此外,我不想为父母加载任何数据,我只是想根据父ID获取子列表。

我也试过用另一种方式写作

   context.Child
         .Include(f => f.Parent)
         .Select(f => f.Parent.FirstOrDefault().ParentId == RequiredParentId);

如果父母没有孩子,.Select(f => f.Parent.FirstOrDefault().ParentId将再次抛出异常。

1 个答案:

答案 0 :(得分:3)

您是否尝试过以下操作?

context.Parent.Where(e => e.ParentId == RequiredParentId).SelectMany(e => e.Child)

如果父母不存在或者不存在子女,则结果集合将为空。

注意:如果有多个父母具有相同的ID,则这将加入每个的子女(具有重复)。我假设ParentId是Parent的密钥,因此不会有重复