Есть сущности, получаемые вне контекста. Их нужно обновить в бд (если есть изменения).
Чтобы обновить запись, нужно подтянуть ее копию из бд, а затем сравнить все поля. И если содержимое полей отличается, установить EntityState.Modified
.
Вопрос по сравнению полей.
Сейчас сравниваю через переопределенный Equals у моделей. Но может есть стандартный механизм Entity Framework'a для этих целей? Постоянно обновлять Equals
, если изменились модели, не хочется. Было бы замечательно, если можно было сделать так context.Users.Update(user)
и он все сам сравнил.
Вариант 1. Посмотрите, подходит ли такой код?
Attaching an existing but modified entity to the context If you have an entity that you know already exists in the database but to which changes may have been made then you can tell the context to attach the entity and set its state to Modified. For example:
var existingBlog = new Blog { BlogId = 1, Name = "ADO.NET Blog" };
using (var context = new BloggingContext())
{
context.Entry(existingBlog).State = EntityState.Modified;
// Do some more work...
context.SaveChanges();
}
Вариант 2. Если лень постоянно обновлять Equals
, можете использовать рефлексию.
foreach (PropertyInfo property in this.GetType().GetProperties())
{
object value1 = property.GetValue(this, null);
object value2 = property.GetValue(another, null);
if (!value1.Equals(value2))
{
return false;
}
}
return true;
Вариант 3. Опять же, если лень постоянно обновлять Equals
, а рефлексия кажется медленной - попробуйте Resharper, он быстро сгенерирует методы Equals.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Каким образом можно удалить элемент списка, зная лишь его значениеНапример,
Выдает ошибку "данный ключ отсутствует в словаре" при нажатии на Q,W
Возможно ли разработать приложение, которое предложит поля для загрузки собственных спрайтов пользователю? При загрузке спрайтов, они "привязываются"...