2017-11-06 1 views
0

나는 이와 같은 리포지토리 프로젝트를 가지고 있습니다.Entity Framework 업데이트 DbContext

https://github.com/tugberkugurlu/GenericRepository/tree/master/src

내가하는 방법이있다.

public void Edit(TEntity entity) 
{ 
    _dbContext.SetAsModified(entity); 
} 


public void SetAsAdded<TEntity>(TEntity entity) where TEntity : class 
{ 
    DbEntityEntry dbEntityEntry = GetDbEntityEntrySafely(entity); 
    dbEntityEntry.State = EntityState.Added; 
} 

그러나 업데이트 기록 중에 있습니다. 이 오류가 발생하는 경우가 있습니다. 동일한 유형의 다른 엔티티가 이미 동일한 기본 키 값을 가지고 있기 때문에 유형의 엔티티 'TP.Model'를 부착

실패했습니다. 이는 'Attach'방법을 사용하거나 그래프의 엔티티 중 임의의 키 값이 충돌하는 경우 엔티티의 상태를 '변경되지 않음'또는 '수정'으로 설정할 때 발생할 수 있습니다. 일부 엔터티 이 새 것이므로 아직 데이터베이스 생성 키 값을받지 못했기 때문일 수 있습니다. 이 경우 '추가'메소드 또는 '추가됨'엔티티 상태를 사용하여 그래프를 으로 추적 한 다음 비 신규 엔티티의 상태를 '변경되지 않음'또는 '수정 됨'으로 적절히 설정하십시오.

+0

본 적이 있습니까? https://stackoverflow.com/questions/23201907/asp-net-mvc-attaching-anentity-of-type-modelname-failed-because-otherotherent –

+0

나는 계속 읽고 있지만 이해할 수는 없다. 문제가있다. – caras

+0

컨텍스트 dbset'Local' 컬렉션을 디버깅하십시오 ... 이미 ID가있는 엔티티가 있으면 코드가 실패 할 수 있습니다. 그러나 코드를 충분히 보여주지 못했기 때문에 문제가 무엇인지 확신 할 수 있습니다. – grek40

답변

0

나는 이와 같은 문제를 해결했다. 첫 번째 열을 확인했습니다. 그 후에, 나는 이런 것을했다.

_dbSet = dbContext.DbSet<TEntity>(); 

나머지는 케이크입니다.

_dbSet.Attach(entity); 
       DbEntityEntry entry = _dbContext.Entry(entity); 
       foreach (var proprty in entry.OriginalValues.PropertyNames) 
       { 
        var Current = entry.CurrentValues.GetValue<object>(proprty); 
        var New = entry.GetDatabaseValues().GetValue<object>(proprty); 

        if (Current != null) 
        { 
         if (!object.Equals(New, Current)) 
         { 
          entry.Property(proprty).IsModified = true; 
         } 
        } 
       } 
관련 문제