프레젠테이션 레이어에 JSON과 MVC를 활용하고 데이터 모델 / 데이터베이스에 대한 엔티티 프레임 워크를 활용하는 웹 사이트를 만드는 실험을 해왔습니다. 내 문제는 Model 객체를 JSON으로 직렬화하는 것과 관련이 있습니다.
코드 우선 방법을 사용하여 데이터베이스를 만듭니다. 코드 첫 번째 방법을 수행 할 때 일대 다 관계 (부모 / 자식)는 자식에게 부모에 대한 참조가 필요합니다. (예제 코드는 오타이지만 그림을 얻습니다)
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를 통해 "parent"객체를 반환 할 때 "child"에 parent 클래스의 속성이 있으므로 순환 참조 오류가 발생합니다.
ScriptIgnore 특성을 시도했지만 자식 개체를 볼 수있는 기능이 없습니다. 어느 시점에서 부모 자식 뷰에 정보를 표시해야합니다.
순환 참조가없는 부모와 자식 모두를위한 기본 클래스를 만들려고했습니다. 불행히도 baseParent와 baseChild를 보내려고하면 JSON 파서에서 파생 클래스로 읽습니다 (이 개념이 저를 탈출하고 있다고 확신합니다).
Base.baseParent basep = (Base.baseParent)parent;
return Json(basep, JsonRequestBehavior.AllowGet);
내가 생각해 낸 한 가지 해결책은 "보기"모델을 만드는 것입니다. 부모 클래스에 대한 참조를 포함하지 않는 간단한 버전의 데이터베이스 모델을 만듭니다. 이러한 뷰 모델에는 각각 데이터베이스 버전 및 데이터베이스 모델을 매개 변수 (viewmodel.name = databasemodel.name)로 사용하는 생성자를 리턴하는 메소드가 있습니다. 이 방법은 효과가 있지만 강제적 인 것 같습니다.
참고 :이 토론에 더 가치가 있다고 생각하기 때문에 여기에 게시하고 있습니다. 다른 디자인 패턴을 사용하여이 문제를 극복하거나 모델에서 다른 속성을 사용하는 것만 큼 간단 할 수 있습니다. 검색 에서이 문제를 극복하는 좋은 방법을 보지 못했습니다.
내 최종 목표는 서버와 통신하고 데이터를 표시하기 위해 JSON을 많이 활용하는 멋진 MVC 응용 프로그램을 만드는 것입니다. 여러 계층에 걸쳐 일관된 모델을 유지하면서