0
如何使用存储过程获取父级及其子级?实体框架6复杂对象的代码优先存储过程映射
我的代码的通用版本是这样的:
public class Parent
{
public Int32 ParentId { get; set; }
public Guid ParentGuid { get; set; }
public String Name { get; set; }
public virtual ICollection<Child> Children { get; set; }
}
public class Child
{
public Int32 ChildId { get; set; }
public String Name { get; set; }
public Int32 ParentId { get; set; }
public virtual Parent Parent { get; set; }
}
public class ParentMapping : EntityTypeConfiguration<Parent>
{
public ParentMapping()
{
ToTable("Parents");
HasKey(t => t.ParentId);
}
}
public class ChildMapping : EntityTypeConfiguration<Child>
{
public ChildMapping()
{
ToTable("Children");
HasKey(t => t.ChildId);
HasRequired(t => t.Parent).WithMany(t => t.Children);
}
}
我试图调用存储过程并获得父母的孩子们:
_context.Database.SqlQuery<Parent>("EXEC [dbo].[GetParent] @ParentGuid", new SqlParameter("@ParentGuid", parentGuid)).SingleOrDefault();
存储过程是一个简单的选择:
SELECT
P.*,
C.*
FROM
[dbo].[Parents] P
INNER JOIN
[dbo].[Children] C ON C.[ParentId] = P.[ParentId]
WHERE
P.[ParentGuid] = @ParentGuid
现在,它只是将父对象的数据映射到对象。 Children
集合为空。我需要做些什么才能让这个人群充满?
完全按照我想要的方式工作。谢谢! – ScubaSteve
我遇到了一个问题,如果您有多个孩子,则该sproc会返回多行。因此,在代码中,我通常会'do _context.Set().SqlQuery()。SingleOrDefault();'由于多行返回,SingleOrDefault将引发错误。有没有办法让EF来合并Parent? –
ScubaSteve
利用'.FirstOrDefault()'取而代之。 – ScubaSteve