我已经创建了一个仓库,使用Entity Framework从我的数据库中返回数据,现在需要将这些数据提供给我的视图,但在此之前,我需要将这些对象转换为我的领域模型。
我的架构看起来像这样:
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
我有一个返回Project的代码库:
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 -> Resource跳转,直接使用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的东西处理,那会是什么样子?