0

EF 모델을 사용하여 설계된 Db가있는 기존 응용 프로그램이 있다고 가정 해 봅니다. 나는 Users 테이블을 가지고 있는데, 클라이언트 코드가 Users 테이블 DAL 로직 프로젝트 EF 엔티티를 일반 객체 (단순한 C# 클래스 인 경우 UserEntry 클래스라고 부름)로 읽으려고 할 때.엔터티 프레임 워크 프로젝션 또는

지금 UserEntry 클래스를 사용하는 Update 메서드를 추가해야합니다. 그래서 UserEntry 클래스에서 어떤 필드가 변경되었는지 어떻게 추적해야하는지 궁금합니다.

물론 모든 데이터를 저장할 수는 있지만 그러한 접근 방식은 아닙니다.

기존 솔루션을 완전히 다시 고려할 수 있으며 UserEntry 클래스도 제거 할 수 있습니다. 어떤 접근 방식을 선택해야합니까? DbContext 생성기를 사용하여 POCO 클래스를 생성하거나 예를 들어 EF Power Tools를 사용하여 코드 우선 접근 방식으로 이동하십시오.

+0

엔티티 프레임 워크에서 왜 그런 거래를하지 않습니까? 이것이 EF Code First ORM 추상화의 요점입니다. – Tejs

+0

EF –

+0

@Tejs의 자체 추적 엔티티에 대해 읽으십시오. 쉽게 조작 할 수 있고 성능 문제가없는 깨끗하고 간단한 클래스가 필요합니다. (http://stackoverflow.com/questions/7587232/entity-framework-projection-into-class- ef-poco-objects보다 빠릅니다.). CF를 사용 하시겠습니까? 이 경우 데이터베이스를 반대로 되돌려 놓아야합니다. –

답변

0

난 당신이 사용하고있는 EF의 버전을 모르는, 그래서 나는이 같은 몇 가지 방법으로, 귀하의 처분에 당신이 DbContext을 가정합니다 :

public class YourContext : DbContext 
{ 
    public DbSet<User> Users {get;set;} 
} 

먼저 당신이 같은 방법으로 사용자를로드

YourContext db = new YourContext(); 

public User Get(int userId) 
{ 
    return db.Users.Find(userId); 
} 

가 지금은 메모리에, 당신은 반환 된 개체에서 동작 : 이렇게하면, DbContext 그것을 추적합니다.

db.SaveChanges() 

을하고는 변경할로, 별도의 업데이트 방법에 대한 필요를 추적하지 않았다 어떤 저장됩니다 : 당신이 그것으로 간섭을 완료하면, 당신은 단지 호출합니다. 의

public void Update(User user) 
{ 
    db.Entry(user).State = EntityState.Modified; 
    db.SaveChanges(); 
} 

:

연결이 끊어진 엔티티 (웹 사이트 등)로 작업하지만, 당신은 추적의 범위를 벗어날 때 개체가 변경되었음을 DbContext을 말할 것이다 추가 라인을 추가해야 거의 필요한 모든 것.