0
ストアドプロシージャを使用して親子を取得するにはどうすればよいですか?Entity Framework 6コードファーストストアドプロシージャが複雑なオブジェクトにマップ
私のコードのジェネリックバージョンはこれです:
_context.Database.SqlQuery<Parent>("EXEC [dbo].[GetParent] @ParentGuid", new SqlParameter("@ParentGuid", parentGuid)).SingleOrDefault();
ストアドプロシージャがselect単純です:私は、ストアドプロシージャを呼び出すと、同様の両親の子供を取得しようとしています
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);
}
}
:
SELECT
P.*,
C.*
FROM
[dbo].[Parents] P
INNER JOIN
[dbo].[Children] C ON C.[ParentId] = P.[ParentId]
WHERE
P.[ParentGuid] = @ParentGuid
現在のところ、親データをオブジェクトにマッピングするだけです。 Children
コレクションはnullです。これを埋めるためには何をする必要がありますか?
正確に私が望むように動作します。ありがとう! – ScubaSteve
私は、複数の子供がいる場合、sprocが複数の行を返す問題にぶつかりました。したがって、コードでは、私は通常docontroll.Set().SqlQuery()。SingleOrDefault(); '複数の行が返されるため、SingleOrDefaultはエラーをスローします。 EFに親を合体させる方法はありますか? –
ScubaSteve
代わりに '.FirstOrDefault()'を使用してトリックを行いました。 – ScubaSteve