나는 고객이 :게으른 로딩 클래스는로드되지 - MVC
public class Client
{
public int ClientID { get; set; }
public string ClientName { get; set; }
public virtual List<Project> Projects { get; set; }
}
그리고 프로젝트 :
public class Project
{
public int ProjectID { get; set; }
public string ProjectName { get; set; }
}
클라이언트 컨트롤러는 세부 얻을 수있다을 조치 :
public ActionResult Details(int id)
{
Client client = db.Clients.Find(id);
return View(client);
}
그리고 세부 사항 게시 작업 :
[HttpPost]
public ActionResult Details(Client client)
{
if (ModelState.IsValid)
{
db.Entry(client).State = EntityState.Modified;
db.SaveChanges();
// reload object from db to populate projects property
client = db.Clients.Find(client.ClientID);
}
return View(client);
}
내 클라이언트 세부 사항보기 :
@model Client
<h1>@Html.DisplayFor(model => model.ClientName)</h1>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Client</legend>
@Html.HiddenFor(model => model.ClientID)
<div class="editor-label">
@Html.LabelFor(model => model.ClientName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ClientName)
@Html.ValidationMessageFor(model => model.ClientName)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
<h2>Projects</h2>
<ul>
@foreach (Project project in Model.Projects)
{
<li>@Html.ActionLink(project.ProjectName, "Details", "Project", new { id = project.ProjectID }, null)</li>
}
</ul>
를 지금은 프로젝트를 진행하고 클라이언트에 가면, 잘 작동, 나는 텍스트 상자에서 클라이언트 이름, 프로젝트의 목록을 참조하십시오. 이름을 편집하고 저장을 클릭합니다. 그러나 하위 클래스의 뷰 오류는 "객체 참조가 객체의 인스턴스로 설정되지 않았습니다."라는 반복을 나열합니다.
DB에서 인스턴스를 다시로드하기 위해 특별히이 줄에 추가했습니다. 지연로드 목록 클래스를 다시 채울 것으로 가정하고 이름 요청과 마찬가지로 가져온 요청과 동일한 인스턴스 데이터를 갖게됩니다. 변경됨 :
client = db.Clients.Find(client.ClientID);
게시판에 하위 클래스가로드되지 않는 이유는 무엇입니까?
일단이 문제가 해결되면 데이터베이스에 레코드가없는 클라이언트를 탐색 할 경우를 대비하여 Client 클래스에서 List 클래스를 인스턴스화하는 생성자를 추가하는 것이 좋습니다.
곳'초기화 db'입니까? – qujck
@qujck - ClientController에서 – Sean
수정 내용이 DB에 저장되어 있습니까? 액션의 클라이언트 인수는 액션 서명에 따라 모델 바인더에 의해 생성 된 "모델 클래스"(엔터티 프록시 클래스 imho가 아님)이기 때문입니다. 클라이언트 클래스에는 Projects를 초기화하는 생성자가 없으므로 프로젝트는 기본값 인 null을 얻습니다. – tschmit007