我已经创建了一个使用实体框架从我的数据库返回数据的存储库,我需要将这些数据提供给我的视图,但在此之前我需要将这些对象转换为我的视图领域模型。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
如果您的存储库未封装在单独的服务中,是的。请下来选民请解释一下 –