2017-12-10 1 views
0

업데이트 방법이 예외를 throw하지만 두 번째 시도가 메시지와 함께 예외를 throw 한 후 첫 번째로 로깅 할 때 정상적으로 작동합니다. **두 번째 업데이트 시도 후 EF가 예외를 throw합니다.

추가 정보 : 같은 유형의 다른 개체가 이미 동일한 기본 키 값을 가지고 있기 때문에 유형 'Hsys.InfluenzaTaniBilgisi'의 실체를 부착하지 못했습니다. 이 문제는 '첨부'방법을 사용하거나 그래프의 요소에 충돌하는 키 값이 인 경우 '변경되지 않음'또는 '수정 됨'으로 을 사용할 때 발생할 수 있습니다. 이는 일부 엔티티가 새롭고 이 아직 데이터베이스 생성 키 값을 수신하지 않았기 때문일 수 있습니다. 이 경우 'Add'메소드 또는 'Added'엔티티 상태를 사용하여 그래프를 추적하면 이 아닌 새 엔티티의 상태를 '변경되지 않음'또는 '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

업데이트 방법은 무엇입니까? – 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.Modified; 

귀하의 코드는 다음과 같이 표시됩니다 :

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

다음을

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