2012-01-20 3 views
1

ID가있는 객체없이 일반적으로 객체가 동일한 지 비교할 수 있습니까?Entity Framework : ID없는 일반 비교 유형?

내가 온라인의 많은 예제를 보았다있는 전형적인 일반 업데이 트를 수행하려고하지만, 그들은 모두 일반적으로 이런 걸 보면 내 시스템

public void Update(TClass entity) 
{ 
    TClass oldEntity = _context.Set<TClass>().Find(entity.Id); 
    foreach (var prop in typeof(TClass).GetProperties()) 
    { 
     prop.SetValue(oldEntity, prop.GetValue(entity, null), null); 
    } 
} 

또는 뭔가 similar.The 문제를 클래스마다 ID가 ClassnameId 일 수있는 모든 클래스에 Id라는 속성이있는 것은 아닙니다. 그렇다면 어쨌든 LINQ를 통해 그러한 엔티티의 존재를 확인하고 어떤 속성도 제공하지 않고 리턴 할 수 있습니까?

답변

1

내가 갱신 값은 복잡하고 스칼라 특성 아니라 탐색 속성을 업데이트 불구하고 읽은 내용에서

public void Update(TClass entity) 
{ 
    var oldEntry = _context.Entry<TClass>(oldEntity); 

    if (oldEntry.State == EntityState.Detached) 
    { 
     _context.Set<TClass>().Attach(oldEntity); 
    } 

    oldEntry.CurrentValues.SetValues(entity); 
    oldEntry.State = EntityState.Modified; 
} 
+0

Thannks를 시도? 그룹의 컬렉션이 있고 하나의 그룹을 제거하고 업데이트하는 사용자가있을 경우이 변경 사항은 CurrentValues.SetValues에 적용되지 않습니다. 아니면 단순히 사용자 개체에서이 메서드를 통해 실제 그룹 개체를 변경하고 업데이트 할 수 없다는 뜻입니까? http://stackoverflow.com/questions/6974660/entity-framework-generic-repository. 또한 코드에 오타가 있습니까? 엔트리가 엔티티를 매개 변수로 가져와야하는 것처럼 보입니다. 데이터베이스에서 가져온 경우 엔 분리되어 있습니까? – SventoryMang

+0

@DOTang 네비게이션 속성에 대해 정확합니다. 일반적인 업데이트 방법은 모든 경우에 적용되지는 않습니다. 위 코드를 컴파일하지 않았습니다. 그래서 어쩌면 오타를 – Eranga

+0

@ Erange Thanks Eranga.하지만 ICollection 그룹이있는 User 개체가 있으면 그 의미를 분명히 할 수 있습니까? a) 특정 사용자의 해당 모음에서 그룹을 제거하고 사용자를 업데이트하면 제거 된 그룹 변경 사항이 저장되지 않거나 b) 실제 그룹 개체를 변경하려고 시도하는 경우 (즉, 컬렉션에서 이름 속성을 삭제하고 사용자를 업데이트하면 그룹 개체의 변경 사항이 저장되지 않습니까? – SventoryMang