我已經創建了一個使用實體框架從我的數據庫返回數據的存儲庫,我需要將這些數據提供給我的視圖,但在此之前我需要將這些對象轉換爲我的視圖領域模型。MVC倉庫 - 域模型vs實體模型
我的模式是這樣的:
TABLE Project
Id INT PRIMARY KEY
Name NVARCHAR(100)
TABLE Resource
Id INT PRIMARY KEY
FirstName NVARCHAR(100)
LastName NVARCHAR(100)
TABLE ProjectResources
Project_Id INT PRIMARY KEY -- links to the Project table
Resource_Id INT PRIMARY KEY -- links to the Resource table
我產生從而結束了尋找這樣一個實體模型:
Project
|
---->ProjectResources
|
---->Resource
我有一個返回項目資源庫:
public interface IProjectRepository
{
Project GetProject(int id);
}
和控制器動作:
public ActionResult Edit(int id)
{
Project project = projectRepository.GetProject(id);
return View(project);
}
當我嘗試並POST這些數據時,這似乎不起作用。當它試圖重建ProjectResources集合時,我得到了一個EntityCollection已經初始化的錯誤。
我認爲這是聰明創建一個域模型就是有點簡單:
public class ProjectEdit
{
public string ProjectName { get; set; }
public List<ProjectResource> Resources { get; set; }
}
public class ProjectResource
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
這似乎是一個更好一點,因爲我也沒有中間ProjectResources - >資源跳躍。 ProjectResource會有我需要的字段。而不是做類似的:
@foreach(var resource in Model.ProjectResources) {
@Html.DisplayFor(m => m.Resource.FirstName)
}
我可以這樣做:
@foreach(var resoure in Model.Resources) {
@Html.DisplayFor(m => resource.FirstName);
}
我的問題是如下 我應該從我的倉庫返回我的域模型還是應該由控制器來處理或中間的其他班級?如果它是通過將項目映射到ProjectEdit的東西在控制器中處理的,那會是什麼樣子?
所以你說我的倉庫應該返回域模型而不是實體模型? – Dismissile
如果您的存儲庫未封裝在單獨的服務中,是的。請下來選民請解釋一下 –