Entity Frameworkコアにネストされた結果はありません

asp.net-core c# entity-framework-core

質問

私はEFでC#で奇妙な動作をしていますそれは、EFコア1.1.0と.NETコアプロジェクトです

"Microsoft.EntityFrameworkCore.SqlServer": "1.1.0",
"Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final",

私は2つのモデル "User"と "Group"を作成しました。

 public class User
 {
    public int Id { get; set; }
    public string name { get; set; }
    public string lastName { get; set; }

    public List<Group> Groups { get; set; }
 }

 public class Group
 {
    public int Id { get; set; }
    public string groupName { get; set; }
    public virtual User User { get; set; }
 }

結果は私に彼のグループのリストを持つユーザーを与えることができます。

今、奇妙な部分:

結果はDBから戻ってきます。私はallUserを調べ、グループはヌルです

私はコンテキストを見て、グループを見る

グループは満たされます:

グループがいっぱいです

今度は、すべてのユーザ結果をもう一度見て、魔法のように、グループはすべてのユーザアイテム内に埋め込まれています。

グループは内部に埋め込まれていますユーザー:

グループはユーザーの内部に埋め込まれています

私は本当に助けに感謝します!

受け入れられた回答

エンティティの読み込みが遅いようです。

.Includeを使用して、それらを読み込むことができます。

 var allUsers = context.Users.Include(user => user.Groups).ToList();

このアプローチでは、クエリーの一部として最初のエンティティ(Users)と関連エンティティをロードします(Groups)。


人気のある回答

この振る舞いは、読み込みエンティティの怠惰から来ます。

デフォルトでは、サブエンティティのそれぞれを手動でロードする必要があります。それはeager-loadingと呼ばれています。

エンティティを熱心に読み込むためには、それぞれのナビゲーションプロパティで.Include()メソッドを使用する必要があります。

例: context.User.Include(x => x.Groups)

Includeメソッドは、データベースからグループを取得するための新しいSQL文を生成します。

その後、 ToList()メソッドを使用してクエリを強制的に実行することができます。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ