Я изучал различные методы редактирования / обновления записи в Entity Framework 5 в среде ASP.NET MVC3, но пока ни один из них не помечает все нужные мне поля. Я объясню почему.
Я нашел три метода, которым я упомяну плюсы и минусы:
Способ 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 х запросов к базе данных, чтобы загрузить оригинал, а затем обновить его
Способ 2 - загрузить исходную запись, установить измененные значения
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
db.Entry(original).CurrentValues.SetValues(updatedUser);
db.SaveChanges();
}
Pros
- Только измененные свойства отправляются в базу данных
Cons
- Представления должны содержать каждое свойство
- 2 х запросов к базе данных, чтобы загрузить оригинал, а затем обновить его
Способ 3 - Присоединить обновленную запись и установить состояние EntityState.Modified
db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();
Pros
- 1 х запрос к базе данных для обновления
Cons
- Не могу указать какие свойства изменить
- Представления должны содержать каждое свойство
Вопрос
Мой вопрос к вам, ребята; Есть ли чистый способ, которым я могу достичь этого набора целей?
- Можно указать, какие свойства изменить
- Представления не должны содержать каждое свойство (например, пароль!)
- 1 х запрос к базе данных для обновления
Я понимаю, что это довольно незначительная вещь, на которую можно указать, но я могу упустить простое решение этого вопроса. Если не метод один будет преобладать ;-)