저장소 패턴을 사용하면 레코드를 업데이트하는 가장 효과적인 방법은 무엇입니까?
-
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();
}
제휴하지 않습니다 StackOverflow