私は3つのエンティティEntity Frameworkを使用して関連する複数のエンティティをdbに挿入すると、何が間違っていますか?
- プリンタを持って
- サーバー
- プリンタがサーバーとドライバのプロパティ
Somwhereは私のコードで私はIEnumerableを<設定している
ドライバープリンタ>ここで、プリンタの各インスタンスには、独自のServerおよびDriverエンティティが保持されています。
今、私はデシベルに提出しようとしているとき、私は次のコードを使用しています:
foreach (Printer p in printers)
{
printmanEntities _dc = new printmanEntities();
p.Driver = _dc.DriverSet.FirstOrDefault(d => d.Name == p.Driver.Name) ?? p.Driver;
p.Server = _dc.ServerSet.FirstOrDefault(s => s.Name == p.Server.Name) ?? p.Server;
_dc.AddToPrinterSet(p);
_dc.SaveChanges();
}
を私は、各プリンタオブジェクトのレコード、および単一のレコードを取得しますことを想定しています一意のドライバとサーバー名ごとにしかし、実際の結果はかなり有線です。
上記のコードは、それぞれの固有のドライバオブジェクトのための単一のレコードを生成するが、明白な理由のために、それぞれ独自のサーバーに複数のレコードを作成します。また、すべてのプリンタレコードは単一のサーバーレコードを指します。私が最初にp.Serverを割り当てると
はさらに、その後、私は、サーバーのエンティティのためのユニークな記録が、ドライバのエンティティのための複数のレコードのみを取得します。
私は間違っていますか?
アップデート:私は予想通りとLINQ2SQLとEF置き換えは、それだけで働きました。一意のエンティティごとに1行、それ以上はありません。
適切な値が返され、dbテーブル内のすべてのプリンタが適切なサーバーにリンクされていると見なされます。 私はちょうど有線のバグを見つけたと思います。 –
他に何かが続いています。私はこの例から何が言えるのかは分かりませんが、Entity Frameworkがこのようなことを間違って行ったことはありませんでした。 –
この更新されたコードをお試しください。 –