2017-03-22 4 views
1

オブジェクトをデータベースに保存してから保存したオブジェクトを取得すると、すべてのnullサブオブジェクトが表示されます。Entity Framework:SaveChangesの後に返されるオブジェクトに子がありません

私はEntity Framework 6を​​使用していますが、以下の例のように常にクエリを使用していますが、正しく動作していますが、このクエリがnullサブオブジェクトを表示する理由はわかりません。

public car save_car(car data) 
{ 
    if (data.id_car == 0) 
    {     
     _contextDrag.car.Add(data); 
     _contextDrag.SaveChanges();       
    } 
    else 
    { 
     _contextDrag.SaveChanges(); 
    } 

    return data; 
} 

public car get_car(long id_car) 
{    
    car data = _contextDrag.car.FirstOrDefault(a => a.idCar == id_car);    
    return data; 
} 
+0

を使用している、あなたがネットの世界に新しいしていると思われる、新しい記事のコードの慣例に見てくださいhttps://msdn.microsoft.com/en-us/library /ff926074.aspx – OrcusZ

答えて

0

このソリューションは私のプロジェクトで適用され、正しく動作します。

私はSystem.Data.Entity.EntityState.Detached

public car save_car(car data) 
{ 
    if (data.id_car == 0) 
    {     
     _contextDrag.car.Add(data); 
     _contextDrag.SaveChanges(); 
     _contextDrag.Entry(data).State = System.Data.Entity.EntityState.Detached; 
    } 
    else 
    { 
     _contextDrag.SaveChanges(); 
    } 

    return dades; 
} 

public car get_car(long id_car) 
{    
    car data = _contextDrag.car.FirstOrDefault(a => a.idCar == id_car);    
    return data; 
} 
2

これは、_contextDragを複数の操作に再利用したためです。 save_carに電話すると、保存された車はコンテキスト内に保存されます。 get_carを呼び出すと、と同じのcarインスタンスが返されます。すべての子プロパティがnullの場合(たとえば、追加した新しいエンティティ)、子のすべてのプロパティがnullになり、遅延ロードは機能しません。これは、save_carとまったく同じエンティティです。いつものように、あなたの文脈を再利用することは最善の方法ではありません。

+0

助けてくれてありがとう、今まで同じ_contextを使用することに問題がなかったし、同じ種類のプロセスを実行した、最初にオブジェクトを保存して、それを再び取得しました。 – Geo

+0

あなたは幸運でしたが、それを続けていくと、はるかに驚くべき問題をデバッグするのが難しくなります。 – Evk

関連する問題