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