Я создал репозиторий, который возвращает данные из моей базы данных с использованием 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 эти данные.Я получал уже инициализированную EntityCollection ошибку при попытке восстановить коллекцию ProjectResources.
Я думаю, что разумнее создать модель домена, которая немного проще:
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 jump.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, как бы это выглядело?