Tôi có một dự án MVC và sử dụng Entity Framework Code First và các đối tượng POCO cho cơ sở dữ liệu. Ví dụ:Làm thế nào để cập nhật các thực thể liên quan trong Entity Framework
public class ClassA
{
public int? Id {get; set;}
public string Name { get; set;}
public virtual ClassB B {get; set;}
}
public class ClassB
{
public int? Id {get;set;}
public string Description {get;set;}
}
Tôi có ActionResult để tạo hoặc chỉnh sửa mô hình. Vấn đề là khi tôi gọi ActionResult này để cập nhật mô hình, và model.B
đã được thay đổi, mối quan hệ không được lưu trong cơ sở dữ liệu. Khi ActionResult được gọi để tạo một đối tượng mới, nó hoạt động như mong đợi. Tôi giải quyết điều này như thế nào?
public ActionResult Save(ClassA model)
{
model.B = GetBFromDb(model.B.Id.Value);
if(ModelState.IsValid)
{
if (id.HasValue)
{
context.Entry(model).State = System.Data.EntityState.Modified;
}
else
{
context.ClassAs.Add(model);
}
context.SaveChanges();
// redirect to index etc.
}
return View("EditForm", model);
}
khi bị ngắt kết nối, khi bạn không có khóa ngoài có một số những khoảng trống mà EF không thể làm việc xung quanh và bạn phải chứng minh thêm mã. Nếu không, nó không thể thấy mối quan hệ. Với tài sản FK, nó là một giá trị vô hướng và dễ dàng hơn cho EF để theo dõi các quy trình. Tôi thực sự đã viết cột Điểm dữ liệu tháng 1 năm 2012 của mình về chủ đề chính xác này! EF dễ sử dụng hơn nhiều khi bạn có tài sản vô hướng FK. Nếu không nhiều chức năng bạn mong đợi "chỉ làm việc" không thể & itf buộc bạn phải hiểu rõ hơn về những gì đang diễn ra và cách cung cấp thông tin cần thiết. Rất tiếc, tôi không thấy FK bị thiếu trước –
@JulieLerman, không sao cả, cảm ơn sự giúp đỡ của bạn! :) – Marthijn