2011-10-18 3 views
0

나는 가능한 한 명확하게하려고합니다 :EF 코드 첫째, 모델 구성

내 목표 : 내가 선언 모델 구성을 읽어 내 DbContext에서 파생 된 내 엔티티 클래스 내부 OnModelCreating를 오버라이드 (override).

이유 : 나는 필드 T의 기본 키있는 얻을 내 데이터 층에 일반적인 void Update<T>(T toUpdate) 방법을 구축하기 위해, 그들에게 전달 된 toUpdate 객체를 검색하고 Set<T>().Find 방법을 사용합니다.

이렇게하면 내가 처리하는 모든 유형의 엔티티에 대해 찾기 로직을 ​​하드 코딩하지 않아도됩니다.

나는 다음과 같이 업데이트를 적용하기 위해 저장된 개체를 검색 할 필요가 : 나는 지점에 붙어

var retrievedItem = _entities.Set<T>().Find(myRetrievedKeyValues); 
_entities.Entry(retrievedItem).CurrentValues.SetValues(toUpdate); 

을 그 (내 엔티티 클래스는 물론 DbContext에서 파생) 내 _entities 인스턴스의 I 모델 구성이 어디에 저장되어 있는지 찾을 수 없습니다.

누구나 올바른 방향으로 나를 가리킬 수 있습니까?

감사합니다.

답변

1

당신은 어떻게 여기에 개체 유형 YourEntity의 주요 속성 이름 검색하는 코드를 찾을 수 있습니다

Entity Framework code first. Find primary key

을 그리고 값 검색 : 기대

public Update<T>(T toUpdate) 
{ 
    // Code from link above with YourEntity = T 

    List<object> myRetrievedKeyValues = new List<object>(); 
    foreach (var keyName in keyNames) 
     myRetrievedKeyValues.Add(toUpdate.GetType().GetProperty(keyName) 
      .GetValue(toUpdate, null)); 

    var retrievedItem = _entities.Set<T>().Find(myRetrievedKeyValues.ToArray()); 
    _entities.Entry(retrievedItem).CurrentValues.SetValues(toUpdate); 
} 

당신이거야 그 이 일반적인 접근 방식에 리플렉션을 사용해야하므로 상당히 느립니다. Update 메서드입니다.

또한 CurrentValues.SetValues은 스칼라 및 복합 속성 만 업데이트한다는 점도 잊지 마십시오. 탐색 속성을 업데이트하는 데 도움이되지 않습니다. 비 엔코 드 코드를 사용하여 각 엔티티 유형에 특정한 관계를 업데이트해야합니다.

+0

완벽 했으므로 나머지 코드는 게시 한 그대로 정확하게 작성했습니다. 매력처럼 작동합니다. –

관련 문제