Tôi đã khám phá các phương pháp chỉnh sửa / cập nhật bản ghi khác nhau trong Entity Framework 5 trong môi trường ASP.NET MVC3, nhưng cho đến nay không có cái nào trong số chúng đánh dấu vào tất cả các hộp tôi cần. Tôi sẽ giải thích tại sao.
Tôi đã tìm thấy ba phương pháp mà tôi sẽ đề cập đến những ưu và nhược điểm:
Phương pháp 1 - Tải bản ghi gốc, cập nhật từng thuộc tính
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();
}
Ưu
- Có thể chỉ định các thuộc tính thay đổi
- Lượt xem không cần chứa mọi tài sản
Nhược điểm
- 2 x truy vấn trên cơ sở dữ liệu để tải bản gốc, sau đó cập nhật nó
Phương pháp 2 - Tải bản ghi gốc, đặt giá trị thay đổi
var original = db.Users.Find(updatedUser.UserId);
if (original != null)
{
db.Entry(original).CurrentValues.SetValues(updatedUser);
db.SaveChanges();
}
Ưu
- Chỉ các thuộc tính được sửa đổi được gửi đến cơ sở dữ liệu
Nhược điểm
- Lượt xem cần chứa mọi tài sản
- 2 x truy vấn trên cơ sở dữ liệu để tải bản gốc, sau đó cập nhật nó
Phương pháp 3 - Đính kèm bản ghi được cập nhật và đặt trạng thái thành EntityState.Modified
db.Users.Attach(updatedUser);
db.Entry(updatedUser).State = EntityState.Modified;
db.SaveChanges();
Ưu
- 1 x truy vấn trên cơ sở dữ liệu để cập nhật
Nhược điểm
- Không thể chỉ định thuộc tính nào thay đổi
- Lượt xem phải chứa mọi tài sản
Câu hỏi
Câu hỏi của tôi cho các bạn; Có cách nào trong sạch để tôi có thể đạt được mục tiêu này không?
- Có thể chỉ định các thuộc tính thay đổi
- Lượt xem không cần chứa mọi thuộc tính (như mật khẩu!)
- 1 x truy vấn trên cơ sở dữ liệu để cập nhật
Tôi hiểu đây là một điều khá nhỏ để chỉ ra nhưng tôi có thể đang thiếu một giải pháp đơn giản cho việc này. Nếu không phương pháp người ta sẽ thắng thế ;-)