2017-12-08 27 views
0

私はEFを学んでいます。私は3つのテーブルを持っています。一つは、多くのドキュメントを持つファイルです。私のテーブルはExpediente(ファイル)、Documento(ドキュメント)、Archivos(イメージ)です。更新コードを持っているとレジスタを追加できません

私はあなたが選択した場合、既に存在するものをすべてデータファイルビューにリストするフォームを持っていますが、そのファイルにさらに多くのドキュメントを追加できなければなりません。私は更新するために私のコードを追加します。 1つの新しい文書を追加しようとすると、dbにスローと例外の両方の変更が保存されませんが、2つ以上を追加しようとすると、次の例外がスローされます。

未処理例外 'System。 InvalidOperationException 'が発生しました

同じタイプの別のエンティティが既に同じ主キー値を持っているため、' Entidad.Documento 'タイプのエンティティをアタッチできませんでした。これは、「Attach」メソッドを使用するか、またはグラフ内のエンティティのいずれかが競合するキー値を持つ場合、エンティティの状態を「Unchanged」または「Modified」に設定すると発生します。これは、一部のエンティティが新しく、データベース生成キー値をまだ受け取っていないことが原因です。この場合、 'Add'メソッドまたは 'Added'エンティティ状態を使用してグラフを追跡し、非新規エンティティの状態を 'Unchanged'または 'Modified'に適切に設定します。次のように

コードは次のとおり文書を取り付ける際

foreach (var documento in documentos) 
{ 
    if (documento.idDocumento == 0) 
    { 
     context.Documentos.Add(documento); 
    } 
    else 
    { 
     var entry = context.Entry(documento); 
     if (entry.State == EntityState.Detached || entry.State == EntityState.Modified) 
     { 
      context.Documentos.Attach(documento); 
     } 
    } 
} 

エラーを示しています。

これは単にvoidを返す関数で、保存するだけで動作し、データベースから受け取ったすべてのドキュメントと追加しているドキュメントを含むBindingListを受け取ります。

よろしくお願いいたします。

+0

が、これは十分に明らかではない:*タイプのエンティティをアタッチ「Entidad.Documento」ために失敗しました**同じ型の別のエンティティはすでに同じ主キー**値を持ちます。 – CodingYoshi

+0

私の質問は明確ではないか、例外ですか?もしそれが私が得るものであれば例外です。 –

+0

あなたは例外を理解していないのですか?それは明らかに問題が何であるかを伝えます。 – CodingYoshi

答えて

0

まあ、私はこれをしなかったし、それが働いていた私は、私のフィールドを更新された方法を変更しなければならなかった:

if (documento.idDocumento == 0) 
        { 
         context.Documentos.Add(documento); 
        } 
        else 
        { 
         Documento updDoc = context.Documentos.FirstOrDefault(x => x.idDocumento == documento.idDocumento); 
         updDoc.NombreDocumento = documento.NombreDocumento; 
        } 
関連する問題