Я создал репозиторий, который возвращает данные из моей базы данных с помощью 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
У меня есть репозиторий, который возвращает проект:
public interface IProjectRepository
{
Project GetProject(int id);
}
И действие контроллера:
public ActionResult Edit(int id)
{
Project project = projectRepository.GetProject(id);
return View(project);
}
Это не Кажется, не очень хорошо работает, когда я пытаюсь отправить эти данные. Я получал уже инициализированную ошибку 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, как бы это выглядело?