저장소 패턴을 사용하면 레코드를 업데이트하는 가장 효과적인 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1418453

  •  07-07-2019
  •  | 
  •  

문제

Ado.net Entity 프레임 워크를 사용하여 저장소 패턴을 구현하고 있습니다. 데이터베이스에서 추가하거나 제거하는 것보다 레코드 업데이트가 상대적으로 더 복잡하다는 것을 알 수 있습니다. 아래의 업데이트 명령문을 참조하고 귀하의 판단에 대한 추가 명세서를 참조하십시오.

원래 레코드를 먼저 리르레트하지 않고도 레코드를 업데이트 할 수있는 방법이 있는지 궁금합니다.

 public void Update(User user)
    {
        var userToUpdate = (from u in db.UserSet
                            where u.UserID == user.UserID
                            select u).FirstOrDefault(); //original record
        db.ApplyPropertyChanges(userToUpdate.EntityKey.EntitySetName,
            user); 
        db.SaveChanges();
    }

동일한 repo에 대한 설명을 추가하십시오.

    public void Add(User user)
    {
        user.MemberFrom = DateTime.Now;
        _repository.AddToUserSet(user);
        _repository.SaveChanges();
    }
도움이 되었습니까?

해결책

아니요, EF로는 할 수 없습니다 (물론 Ado.net을 직접 사용하지 않는 한). 즉, 엔티티 컨텍스트의 부분 클래스에 몇 가지 방법을 추가하여 검색 코드를 단순화 할 수 있습니다. 이것이 내가하는 방법입니다.

public partial class MyEntities
{
    public T GetById<T>(object id) where T : class
    {
        EntityKey key = CreateKey<T>(id);
        // see http://msdn.microsoft.com/en-us/library/system.data.objects.objectcontext.getobjectbykey.aspx
        return (T)GetObjectByKey(key); 
    }

    public static EntityKey CreateKey<T>(object id)
    {
        var type = typeof(T);
        return new EntityKey("MyEntities." + type.Name, "Id", id);
    }
}

이제 위의 코드가되어야합니다

public void Update(User user)
{
    var userToUpdate = db.GetById<UserSet>(user.UserID); 
    db.ApplyPropertyChanges(userToUpdate.EntityKey.EntitySetName, user); 
    db.SaveChanges();
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top