Я изучал различные методы редактирования/обновления записи в Entity Framework 5 в среде ASP.NET MVC3, но пока ни один из них не отметит все необходимые мне поля. Я объясню, почему.Entity Framework 5 Обновление записи
я нашел три способа, которые я упомяну плюсы и минусы:
Метод 1 - Загрузка исходной записи, обновлять каждое свойство
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
original.BusinessEntityId = updatedUser.BusinessEntityId;
original.Email = updatedUser.Email;
original.EmployeeId = updatedUser.EmployeeId;
original.Forename = updatedUser.Forename;
original.Surname = updatedUser.Surname;
original.Telephone = updatedUser.Telephone;
original.Title = updatedUser.Title;
original.Fax = updatedUser.Fax;
original.ASPNetUserId = updatedUser.ASPNetUserId;
db.SaveChanges();
}
Pros
- Можно указать, какие свойства изменить
- Представление не должно содержать каждый объект
Cons
- -х запросы на базе данных, чтобы загрузить оригинал затем обновить его
Метод 2 - Загрузка исходной записи, установленные измененные значения
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
db.Entry(original).CurrentValues.SetValues(updatedUser);
db.SaveChanges();
}
Pros
- только измененные свойства передаются в базу данных
Cons
- Просмотров должны содержать каждому объекту
- 2 х запросов на базу данных, чтобы загрузить оригинал затем обновите его
Способ 3 - Присоединить обновленную запись и установить состояние EntityState.Модифицированный
db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();
Pros
- 1 х запросов на базу данных для обновления
Против
- Не можете указать, какие свойства изменяются
- Просмотров должно содержать все свойства
Вопрос
Мой вопрос к вам, ребята; есть ли чистый способ, которым я могу достичь этого набора целей?
- Можно указать, какие свойства изменяются
- Представления не должны содержать все свойства (например, пароль!)
- 1 х запрос на базу данных для обновления
Я понимаю, что это довольно второстепенное дело, но я могу пропустить простое решение этого. Если не метод один будет преобладать ;-)
Используйте ViewModels и хорошее отображение двигатель? Вы получаете только «свойства для обновления», чтобы заполнить ваше представление (а затем обновить). Там еще будут 2 запроса для обновления (получите оригинал + обновите его), но я бы не назвал это «Кон». Если это ваша единственная проблема с производительностью, вы счастливый человек;) –
Спасибо @ RaphaëlAlthaus, очень действительная точка. Я мог бы сделать это, но мне нужно создать CRUD-операцию для нескольких таблиц, поэтому я ищу метод, который может работать с моделью напрямую, чтобы сохранить меня, создавая n-1 ViewModel для каждой модели. – Stokedout
Ну, в моем текущем проекте (многие сущности тоже) мы начали с работы над Моделями, думая, что мы потеряем время, работая с ViewModels. Теперь мы переходим к ViewModels, и при запуске (с незначительной) инфраструктурой она намного далека, намного яснее и удобнее в обслуживании. И более безопасно (не нужно бояться злых «скрытых полей» или подобных вещей) –