Есть сущности, получаемые вне контекста. Их нужно обновить в бд (если есть изменения).
Чтобы обновить запись, нужно подтянуть ее копию из бд, а затем сравнить все поля. И если содержимое полей отличается, установить 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.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Каким образом можно удалить элемент списка, зная лишь его значениеНапример,
Выдает ошибку "данный ключ отсутствует в словаре" при нажатии на Q,W
Возможно ли разработать приложение, которое предложит поля для загрузки собственных спрайтов пользователю? При загрузке спрайтов, они "привязываются"...