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