[英]Code-First Entity Framework w/ Stored Procedure returning results from complex Full-text Searches
[英]Entity Framework 6 code-first stored procedure map to complex objects
如何使用存儲過程來獲取父代及其子代?
我的代碼的通用版本是這樣的:
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
集合為null。 我需要怎么做才能填充這個?
如果您使用context.Database.SqlQuery
則實體不會被跟蹤,只是作為純數據模型返回。 如果要解析子級(通過延遲加載),則需要以將對象添加到EF對象圖中的方式查詢它們:
_context.Set<Parent>().SqlQuery(...)
通過對DbSet
運行sql查詢,默認情況下它將跟蹤它們,並且延遲加載現在應該可以工作了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.