Tôi có 2 dự án - một thư viện lớp có chứa một mô hình EDM Entity Framework và một dự án ASP.NET MVC riêng biệt.Làm thế nào để cập nhật thực thể EF 4 trong ASP.NET MVC 3?
Tôi đang gặp sự cố với cách giả sử của bạn chỉnh sửa và lưu các thay đổi đối với thực thể bằng MVC. Trong điều khiển của tôi, tôi có:
public class UserController : Controller
{
public ActionResult Edit(int id)
{
var rep = new UserRepository();
var user = rep.GetById(id);
return View(user);
}
[HttpPost]
public ActionResult Edit(User user)
{
var rep = new UserRepository();
rep.Update(user);
return View(user);
}
}
My UserRepository
có một phương pháp cập nhật như thế này:
public void Update(User user)
{
using (var context = new PDS_FMPEntities())
{
context.Users.Attach(testUser);
context.ObjectStateManager.ChangeObjectState(testUser, EntityState.Modified);
context.SaveChanges();
}
}
Bây giờ, khi tôi bấm 'Save' trên trang người dùng chỉnh sửa, tham số user
chỉ chứa hai giá trị dân cư: Id và FirstName. Tôi lấy nó là do thực tế là tôi chỉ hiển thị hai thuộc tính đó trong khung nhìn.
Câu hỏi của tôi là, nếu tôi đang cập nhật tên của người dùng, và sau đó muốn lưu nó, tôi giả sử làm gì với các thuộc tính khác User
không được hiển thị trên chế độ xem vì giờ đây chúng chứa 0 hoặc Giá trị NULL trong đối tượng user
?
Tôi đã đọc rất nhiều về việc sử dụng các thực thể sơ khai, nhưng tôi không nhận được nhanh chóng, trong đó không có ví dụ nào tôi đã thực sự làm việc. tức là tôi tiếp tục nhận ngoại lệ liên quan đến EntityKey.
Ai đó có thể chỉ cho tôi một hướng dẫn/ví dụ tốt về cách cập nhật thực thể EF 4 bằng cách sử dụng lớp lưu trữ, được gọi là đầu cuối của MVC không?
@ Jason Evans - được gọi là kỹ thuật còn sơ khai, và chỉ hoạt động đối với tài sản vô hướng. Nếu bạn có một thuộc tính điều hướng như 'User.Addresses' mà bạn đang ràng buộc trong View của bạn, thì ở trên sẽ không cập nhật địa chỉ. Tôi sẽ khuyên bạn nên truy xuất lại User từ DB, sau đó sử dụng 'TryUpdateModel' để cập nhật đối tượng. Xem câu hỏi/câu trả lời gần đây của tôi tại đây để biết thêm thông tin: http://stackoverflow.com/questions/4653834/asp-net-mvc-ef4-poco-repository-how-to-update-relationships/4666466#4666466 – RPM1984
@ RPM1984 - Điều đó sẽ tiết kiệm rắc rối với các thuộc tính định hướng. Mối quan tâm mà tôi có với TryUpdateModel() là thiết kế. Tôi đang cố gắng để đảm bảo rằng tôi có thể sử dụng một kho lưu trữ để đối phó với việc nhận/tiết kiệm/xóa các công cụ. Bằng cách sử dụng TryUpdateModel(), bạn có gợi ý về thiết kế tốt về cách viết mã này không? Tôi chỉ không muốn các bộ điều khiển để đối phó với bất kỳ mã cơ sở dữ liệu liên quan nếu bạn thấy những gì tôi có ý nghĩa. –
Không, không chắc chắn ý bạn là gì. Mặc dù vậy, tôi sẽ đoán, tạo một phương thức "Lưu" tiêu chuẩn trong Kho lưu trữ của bạn, mà "tìm ra" nếu đó là một đối tượng mới/hiện có (dựa trên ID, ví dụ). Vì vậy, bạn không cần phải gọi repository.Update hoặc repository.Add. Chỉ cần TryUpdateModel rồi Lưu. Nếu bạn đề cập đến bạn không muốn điều khiển của bạn chạm vào thực thể của bạn - tôi không hiểu mối quan tâm của bạn. Bộ điều khiển có nghĩa là làm mới mô hình. Và tất cả nó đang làm là cập nhật một "đối tượng" - kho lưu trữ của bạn vẫn còn quan tâm đến sự kiên trì của đối tượng đã nói. – RPM1984