В идеале, я хотел бы иметь:ServiceStack Linq поля слияния и частичное обновление
public user Update(User dto) {
var user = userRepository.GetUserById(dto.Id);
var mergedFields = Merge(user, dto); //my dream function
userRepository.UpdateOnly(user, mergedFields)
.Where(u => u.Id == user.Id); //OrmLite UpdateOnly func
return user;
}
Где Merge
моя функция Deam, которая возвращает Linq выражение:
Expression<Func<T, TKey>> Merge(T target, T source)
Так, Merge
знает что было обновлено от Т-источника до цели Т. Обновите значения этих свойств в целевом объекте и верните эти обновленные свойства в виде выражения Linq для OrmLite UpdateOnly.
Однако, я тяну свои волосы, и я не могу понять, как написать эту функцию Merge
. Пожалуйста, бросьте мне помощь!
Спасибо!
Ref: ServiceStack OrmLite является light weight ORM. Это UpdateOnly
функция принимает Linq выражение как это:
.UpdateOnly(new User {FirstName="admin", LastName="my", OtherStuff="etc..."},
u => {u.FirstName, u.LastName}).Where(u => u.Id == 123);
Это очень подробный ответ! Спасибо, я попробую решение и расскажу вам, как это работает позже. – Tom
@Tom Спасибо. Надеюсь, ты получишь это. – Scott