3

我々はいくつかのオブジェクトのリストを提出するときに我々は外部キーに関連するエラーを取得し、データベースに追加される問題に実行している...複数のレコードを挿入するときのEntity Frameworkの外部キーの問題?

using (context ctx = new context() 
{ 
    foreach(foo f in bars) 
    { 
     ctx.AddToFoo(f); 
    } 
    ctx.SaveChanges(); 
} 

エラーが言うこととINSERT文の競合foriegnのキーの制約があるが、foreachループ内でSaveChanges()を動かすとうまくいくが、それはずっと遅くなるようだ...

私はこれをBulkCopyクラスにロールしますが、 SaveChangesに関連付けられます。

編集:ここ はSaveChangesは、それらがAddToFooに追加されたのと同じ順序で各FOOを保存していないように見えます例外Linky

+3

エラーをシェアするにはどうなりますか? SQLプロファイラやEFProfを起動して、発行されている実際のSQLを見て、間違った順序で何かをしようとするかどうかを確認する価値があるかもしれません。 –

+0

私はそれをプリントアウトしているだけなので、例外の画像をアップロードしようとしています... – Chuck

+0

ok [Link to Pic](http://www.flickr.com/photos/[email protected]/) 6510885421 /) – Chuck

答えて

0

の画像へのリンクです。

+0

各fooは他のキーとは無関係ですそれではいけません。 – Chuck

0

なぜそれがforループ内でうまくいくのかわかりません。ループの外側に例外がある場合、内部でも例外が発生するはずです。

例外に記載されている外部キー制約のトラブルシューティングを行う必要があります。したがって、制約が "FK_Foo_Parent"の場合、Foo項目が参照する親項目が最初に必要です。

あなたのコードは次のようになります。

   using (context ctx = new context()) 
       { 
        ctx.AddToParents(parent); 

        foreach (foo f in bars) 
        { 
         parent.Foos.Add(f); 
         ctx.AddToFoos(f); 
        } 
        ctx.SaveChanges(); 
       } 

それセットアップする新しいfooのレコードとその親レコード間の外部キー参照。

+0

私は、SaveChangesを呼び出す前にあまりにも多くのオブジェクトを追加することと関係があるかもしれないと考えていましたが、その時点で外部キーがすべて正しくなければならないので、SQLを生成する必要があります。 – Chuck

関連する問題