Tôi đã thử nghiệm tạo một trang web tận dụng MVC với JSON cho lớp trình bày và khung Entity cho mô hình dữ liệu / cơ sở dữ liệu. Vấn đề của tôi xuất hiện với việc tuần tự hóa các đối tượng Mô hình của tôi thành JSON.
Tôi đang sử dụng phương pháp mã đầu tiên để tạo cơ sở dữ liệu của tôi. Khi thực hiện mã trước tiên, một mối quan hệ một đến nhiều (cha mẹ / con cái) đòi hỏi đứa trẻ phải có một tham chiếu lại cho cha mẹ. (Ví dụ mã của tôi là một lỗi đánh máy nhưng bạn có được hình ảnh)
class parent
{
public List<child> Children{get;set;}
public int Id{get;set;}
}
class child
{
public int ParentId{get;set;}
[ForeignKey("ParentId")]
public parent MyParent{get;set;}
public string name{get;set;}
}
Khi trả về một đối tượng "cha mẹ" thông qua JsonResult, một lỗi tham chiếu vòng tròn được đưa ra vì "con" có thuộc tính của lớp cha.
Tôi đã thử thuộc tính ScriptIgnore nhưng tôi mất khả năng nhìn vào các đối tượng con. Tôi sẽ cần phải hiển thị thông tin trong chế độ xem cha mẹ tại một số điểm.
Tôi đã cố gắng tạo các lớp cơ sở cho cả cha mẹ và con cái mà không có tài liệu tham khảo vòng tròn. Thật không may khi tôi cố gắng gửi baseParent và baseChild, chúng được đọc bởi JSON Parser dưới dạng các lớp dẫn xuất của chúng (tôi khá chắc chắn rằng khái niệm này đang thoát khỏi tôi).
Base.baseParent basep = (Base.baseParent)parent;
return Json(basep, JsonRequestBehavior.AllowGet);
Giải pháp tôi đã đưa ra là tạo Mô hình "Xem". Tôi tạo các phiên bản đơn giản của các mô hình cơ sở dữ liệu không bao gồm tham chiếu đến lớp cha. Mỗi mô hình khung nhìn này có phương thức trả về Phiên bản cơ sở dữ liệu và hàm tạo lấy mô hình cơ sở dữ liệu làm tham số (viewmodel.name = databasemodel.name). Phương pháp này có vẻ bắt buộc mặc dù nó hoạt động.
LƯU Ý: Tôi đang đăng ở đây vì tôi nghĩ rằng đây là thảo luận xứng đáng hơn. Tôi có thể tận dụng một mẫu thiết kế khác để khắc phục vấn đề này hoặc nó có thể đơn giản như sử dụng một thuộc tính khác trên mô hình của tôi. Trong tìm kiếm của tôi, tôi đã không thấy một phương pháp tốt để khắc phục vấn đề này.
Mục tiêu cuối cùng của tôi sẽ là có một ứng dụng MVC đẹp, tận dụng mạnh mẽ JSON để giao tiếp với máy chủ và hiển thị dữ liệu. Trong khi duy trì một mô hình nhất quán trên các lớp (hoặc tốt nhất mà tôi có thể đưa ra).