2017-12-10 4 views
0

Es gibt eine Update-Methode, die Ausnahme auslöst, aber es funktioniert gut in der ersten Anmeldung nach dem zweiten Versuch löst Ausnahme mit Nachricht; **EF löst Ausnahme nach zweitem Update-Versuch aus

Zusätzliche Informationen: eine Einheit vom Typ Anbringen ‚Hsys.InfluenzaTaniBilgisi‘ ist fehlgeschlagen, weil eine andere Einheit derselben Art bereits den gleichen Primärschlüssel Wert hat. Dies kann passieren, wenn die Methode 'Attach' verwendet oder den Status einer Entität auf 'Unverändert' oder 'Modifiziert' setzt, wenn Entitäten im Diagramm widersprüchliche Schlüsselwerte haben. Dies kann daran liegen, dass einige Entitäten neu sind und noch keine datenbankgenerierten Schlüsselwerte erhalten haben. In diesem Fall verwenden Sie die "Add" -Methode oder den Entity-Status "Added", um den Graphen zu verfolgen und dann den Status von nicht-neuen Entitäten auf "Unverändert" oder "Modified" als geeignet.

** Iknow seinen gemeinsamen und viele smilar Problem gefunden, aber ich konnte es funktioniert ..

hier Code Stück;

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

Was in der Update-Methode ist? – Sefe

+0

Welche Version von EntityFramework verwenden Sie? – Nikolaus

+0

Ich denke das Problem liegt im Update-Call. Vielleicht ist es besser, den ObjectState nicht zu setzen und die Update-Methode aufzurufen. – Nikolaus

Antwort

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

Das ist Ihr Problem.

Sie nicht die Framework.Entities.ObjectState.Modified;auf einem vorhandenen Schlüssel verwenden können, ADO.NET Entity Framework erlauben nicht, dass.

Sie müssen zuerst tun:

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

und dann:

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

Ihr Code wie folgt aussehen:

 taniExist.HastaYasi = taniBilgisi.HastaYasi; 
          taniExist.HekimTC = taniBilgisi.HekimTC; 
          taniExist.ObjectState = Framework.Entities.ObjectState.Added; 
          Update(taniExist); 
Framework.Entities.ObjectState.Modified; 
Verwandte Themen