ฉันได้ทำการทดลองกับการสร้างเว็บไซต์ที่ใช้ประโยชน์จาก MVC กับ JSON สำหรับเลเยอร์งานนำเสนอและกรอบงานเอนทิตีสำหรับโมเดลข้อมูล / ฐานข้อมูล ปัญหาของฉันมาพร้อมกับการทำให้วัตถุโมเดลของฉันเป็นอนุกรมลงใน JSON
ฉันใช้รหัสวิธีแรกในการสร้างฐานข้อมูลของฉัน เมื่อทำโค้ดวิธีแรกความสัมพันธ์แบบหนึ่งต่อหลายคน (parent / child) ต้องการให้เด็กมีการอ้างอิงกลับไปที่ parent (รหัสตัวอย่างของฉันเป็นตัวพิมพ์ผิด แต่คุณได้รับรูปภาพ)
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;}
}
เมื่อส่งคืนวัตถุ "พาเรนต์" ผ่าน JsonResult ข้อผิดพลาดการอ้างอิงแบบวงกลมจะถูกส่งออกไปเนื่องจาก "child" มีคุณสมบัติของคลาสพาเรนต์
ฉันได้ลองใช้ ScriptIgnore แล้ว แต่ฉันไม่สามารถดูวัตถุลูกได้ ฉันจะต้องแสดงข้อมูลในมุมมองลูกผู้ปกครองในบางจุด
ฉันพยายามสร้างคลาสพื้นฐานสำหรับทั้งผู้ปกครองและเด็กที่ไม่มีการอ้างอิงแบบวงกลม น่าเสียดายที่เมื่อฉันพยายามส่ง baseParent และ baseChild สิ่งเหล่านี้อ่านโดย JSON Parser เป็นคลาสที่ได้รับมา (ฉันค่อนข้างแน่ใจว่าแนวคิดนี้หนีฉันไป)
Base.baseParent basep = (Base.baseParent)parent;
return Json(basep, JsonRequestBehavior.AllowGet);
วิธีแก้ไขปัญหาเดียวที่ฉันมีคือสร้างโมเดล "ดู" ฉันสร้างรุ่นฐานข้อมูลที่เรียบง่ายซึ่งไม่มีการอ้างอิงไปยังคลาสพาเรนต์ มุมมองโมเดลเหล่านี้แต่ละวิธีมีวิธีส่งคืนเวอร์ชันฐานข้อมูลและตัวสร้างที่ใช้โมเดลฐานข้อมูลเป็นพารามิเตอร์ (viewmodel.name = databasemodel.name) วิธีการนี้ดูเหมือนจะถูกบังคับแม้ว่าจะใช้งานได้
หมายเหตุ: ฉันกำลังโพสต์ที่นี่เพราะฉันคิดว่านี่เป็นการสนทนาที่คุ้มค่ามากกว่า ฉันสามารถยกระดับรูปแบบการออกแบบที่แตกต่างออกไปเพื่อแก้ไขปัญหานี้หรืออาจจะง่ายเหมือนการใช้คุณลักษณะที่แตกต่างกันในโมเดลของฉัน ในการค้นหาของฉันฉันไม่ได้เห็นวิธีที่ดีในการเอาชนะปัญหานี้
เป้าหมายสุดท้ายของฉันคือการมีแอปพลิเคชัน MVC ที่ดีซึ่งใช้ประโยชน์จาก JSON อย่างมากสำหรับการสื่อสารกับเซิร์ฟเวอร์และแสดงข้อมูล ในขณะที่รักษาแบบจำลองที่สอดคล้องกันข้ามชั้น (หรือดีที่สุดเท่าที่ฉันจะทำได้)