Tôi biết nó đã được hỏi trước đó, nhưng sau nhiều giờ tìm kiếm và mã hóa, tôi không thể tiếp cận được với công việc và sạch sẽ. Dưới đây là những gì tôi có:Hoàn thành Chèn/Cập nhật/Xóa các Thực thể Trẻ em trong Khuôn khổ Thực thể
public class QuestionModel
{
public int QuestionID { get; set; }
public string QuestionText { get; set; }
public IList<QuestionChoiceModel> Choices { get; set; }
}
public class QuestionChoiceModel
{
public int ChoiceID { get; set; }
public string ChoiceText { get; set; }
}
Tôi đang sử dụng EF 5 cho ứng dụng ASP.Net MVC này. Generic Repository Pattern và Dependency Injection với Ninject sử dụng InRequestScope()
được thiết lập và hoạt động trơn tru. Các mô hình này được ánh xạ tới/từ các thực thể không có vấn đề gì.
Thêm câu hỏi mới vào cơ sở dữ liệu là thẳng về phía trước. Tôi đặt thuộc tính Câu hỏi của một số trường hợp QuestionChoice và EF xử lý phần còn lại.
Sự cố là về cập nhật. Giả sử chúng ta có một câu hỏi trong cơ sở dữ liệu với 3 QuestionChoices:
ChoiceID QuestionID ChoiceText
-------- ---------- ----------
1 1 blah blah
2 1 blah blah
3 1 blah blah
Khi chỉnh sửa trang của một Câu hỏi mở (GET:/câu hỏi/Edit/1), tôi thấy những 3 lựa chọn sử dụng một trong foreach
Razor. Tôi đã viết một số mã JQuery có thêm hoặc xóa đánh dấu bắt buộc cho các phần tử đầu vào nếu người dùng muốn. Vì vậy, các QuestionChoice với ID = 1 có thể được chỉnh sửa trên máy khách, ID = 2 có thể bị xóa, và một ID = 4 mới có thể được thêm vào. Dữ liệu biểu mẫu được ràng buộc trở lại một QuestionModel một cách hoàn hảo khi người dùng nhấn nút Save (POST:/Questions/Edit/1). Mô hình được ánh xạ tới thực thể Câu hỏi một cách chính xác. Đó là nơi câu chuyện bắt đầu!
Bây giờ thực thể Câu hỏi có một tập hợp các QuestionChoices một số đã có trong cơ sở dữ liệu, một số nên được thêm vào cơ sở dữ liệu, và một số sẽ bị xóa khỏi cơ sở dữ liệu.
Tôi đã đọc nhiều bài viết như: Entity Framework not saving modified children
tôi có thể xử lý chỉnh sửa ở chỗ cách bẩn. Và cũng có kỷ lục mới bởi:
this._context.Entry(choice).State = EntityState.Added;
Nhưng tôi đang tìm kiếm một cách thanh lịch hơn. Và cũng có thể xử lý các bản ghi cần xóa. Có cách tiếp cận tốt để xử lý việc chèn/cập nhật/xóa hoàn toàn các thực thể con trong kịch bản này bằng EF? Thành thật mà nói, tôi mong đợi nhiều hơn từ EF.
Cảm ơn. Tôi sẽ nhìn vào nó. –