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