Entity Framework 7 Include()が期待どおりに機能しない

entity-framework entity-framework-core

質問

EF7は、リクエストされていなくてもナビゲーションプロパティを含んでいます。たとえば、私は以下のエンティティを持っています。

public class Employee
{
    public int EmployeeId { get; set; }
    public string Name { get; set; }
    public string Gender { get; set; }
    public int DepartmentId { get; set; }
    public Department Department { get; set; }
}

public class Department
{
    public int DepartmentId { get; set; }
    public string Name { get; set; }
    public ICollection<Employee> Employees { get; set; }
}

私の取得クエリは以下の通りです。

ctx.Employees.Where(e => e.Gender == "Male").Include(e => e.Department)

私が手DepartmentのプロパティEmployee私が持っていると予想通りである€â塗りつぶされたオブジェクト」 IncludeためにDepartment 。私はDepartment.Employeesも満たされていますが、部分的に(男性従業員のみで)見つかりました。私はDepartment.EmployeesIncludeを指定していませんが、まだ入力されています。これは設計上の動作ですか?このシナリオでDepartment.Employeesを取得しないようにする方法はありますか?

私はバージョン7.0.0-rc1-finalのEF7 NuGetパッケージを使用しています。

人気のある回答

それがEFの正常な動作です。クエリを実行すると、読み込んだすべてのエンティティがコンテキストにアタッチされます。したがって、EFは別のクエリを実行しておらず、 Department.Employeesをロードしていません。これらの従業員は、クエリを実行するときに先に読み込まれました。要約すると、 Department.Employeesナビゲーションプロパティを参照すると、EFは、そのプロパティを、 Genderによってクエリフィルタリングで読み込んだ従業員で埋め尽くします。

更新:

上記の私のコメントで指摘したように、Lazy LoadingはEF7ではサポートされていません。あなたはJson.NETは、そのプロパティをシリアル化することを避けたい場合は、属性を使用することができますJsonIgnore 、そのプロパティを介して、またはあなたのクエリを予測し、必要なプロパティのみを埋めるためにカスタムクラス(DTO)を作成することができます。この最後のソリューションを使用する場合は、 Automapperをご利用ください。



Related

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