2017-12-10 8 views
0

更新メソッドが例外をスローしますが、2回目の試行がメッセージで例外をスローした後に初めてログに記録されます。 **2回目の更新試行後にEFが例外をスローする

追加情報:「Hsys.InfluenzaTaniBilgisi」をタイプ のエンティティをアタッチ同じ タイプの別のエンティティが既に同じ主キー値を持つために失敗しました。これは、 'Attach'メソッドを使用して を使用した場合、またはエンティティの状態を に設定した場合に発生する可能性があります。グラフ内のエンティティのキ​​ー値が一致しない場合は となります。これは、一部のエンティティが新しく、 がデータベース生成キー値をまだ受け取っていないことが原因です。この場合は、 'Add'メソッドまたは 'Added'エンティティの状態を とし、 を非変更エンティティの状態を 'Unchanged'または 'Modified'に設定してください。 が適切です。

** その共通Iknow、多くのsmilar問題が見つかりましたが、私はそれを動作させるcouldntの..

ここでのコード片があります。

public void CreateUpdateInfluenzaTani(InfluenzaTaniBilgisi taniBilgisi) 
      { 
       using (HsysDbContext con = new HsysDbContext()) 
       { 

        if (con.InfluenzaTestTanilari.Any(x => x.ICD10TaniKodu == taniBilgisi.ICD10Kodu && x.IsDeleted != true)) 
        { 
         var taniExist = con.InfluenzaTaniBilgisi.FirstOrDefault(x => x.MuayeneId == taniBilgisi.MuayeneId && x.ICD10K 

odu == taniBilgisi.ICD10Kodu && x.IsDeleted != true); 
         if (taniExist == null) 
         { 
          taniBilgisi.ObjectState = Framework.Entities.ObjectState.Added; 
          Create(taniBilgisi); 
         } 
         else 
         { 
          taniExist.HastaYasi = taniBilgisi.HastaYasi; 
          taniExist.HekimTC = taniBilgisi.HekimTC; 
          taniExist.ObjectState = Framework.Entities.ObjectState.Modified; 
          Update(taniExist);// throws Exception! 
         } 
        } 
       } 
      } 
+1

Updateメソッドには何が? – Sefe

+0

どのバージョンのEntityFrameworkを使用しますか? – Nikolaus

+0

問題はUpdate-Callにあると思います。おそらく、ObjectStateを設定せずにUpdateメソッドを呼び出すほうがよいでしょう。 – Nikolaus

答えて

1
taniExist.ObjectState = Framework.Entities.ObjectState.Modified; 

これはあなたの問題です。あなたは既存のキーにFramework.Entities.ObjectState.Modified;を使用することはできません

エンティティフレームワークは、そのを許可しません。

taniExist.ObjectState = Framework.Entities.ObjectState.Added; 

、その後:あなたが最初にこれを実行する必要が

taniExist.ObjectState = Framework.Entities.ObjectState.Modified; 

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

 taniExist.HastaYasi = taniBilgisi.HastaYasi; 
          taniExist.HekimTC = taniBilgisi.HekimTC; 
          taniExist.ObjectState = Framework.Entities.ObjectState.Added; 
          Update(taniExist); 
Framework.Entities.ObjectState.Modified; 
関連する問題