2017-09-24 19 views
1

私はその後、私は次の行を使用して、私のオブジェクトをロードし、次のコードEF遅延ロードは無効化され、まだEFロード全グラフ

を使用してEF 6.1の無効化遅延ロードを持っています。

T result = (T)context.Set<T>().Find(id); 

ここで、Tはナビゲーションプロパティを持つオブジェクトです。このFindメソッドは遅延ロードを無効にしているのでナビゲーションプロパティなしでオブジェクトを返すことを期待していますが、コードを実行して変数値をチェックすると、ナビゲーションプロパティもロードされています。誰でも問題が何であるか知っていますか?ここで

EDIT

ミニサンプルです

あるMyContext

public class MyContext : DbContext 
{ 

    public MyContext() : base("DefaultConnection") 
    { 
     this.Configuration.LazyLoadingEnabled = false; 
     this.Configuration.ProxyCreationEnabled = false; 
    } 

    public DbSet<Lesson> Lessons { get; set; } 
    public DbSet<Part> Parts { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
    } 

} 

モデル

public class Lesson 
{ 

    public int Id { get; set; } 
    public Part Part { get; set; } 

} 


public class Part 
{ 

    public int Id { get; set; } 

    public string Name { get; set; } 
} 

クライアントコード

  using (MyContext c = new EFTest.MyContext()) 
      { 

       Lesson d = new EFTest.Lesson(); 
       d.Part = new EFTest.Part() { Name = "a" }; 

       Lessson insert = c.Lessons.Add(d); 
       c.SaveChanges(); 

       Lesson returned = c.Lessons.Find(insert.Id); 
      } 
+0

EF:CoreまたはNot Core?バージョン? –

+0

Entity Framework 6.1 – Sisyphus

+0

奇妙な音、[mcve]、および/またはgenered SQLを表示します。 –

答えて

1

これは、問題は私のクライアントコードとあったことが判明しました。私がちょうどEFを挿入したオブジェクトを見つけようとすると、キャッシュからそれを取得します。そこにはすでにフルグラフが存在していますので、フルグラフが返されます。 Find(Insert.Id)の代わりにFind(1)を試みると、浅いオブジェクトが正しく返されました。また、DbSetでAsNoTrackingメソッドを使用しても同じ結果が得られました。

関連する問題