He creado un repositorio que devuelve datos de mi base de datos utilizando Entity Framework y necesito proporcionar estos datos a mi vista, pero antes de hacerlo necesito convertir esos objetos en mi modelo de dominio.MVC Repository - Modelo de dominio vs Entity Model
Mi esquema es el siguiente:
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
me genera un modelo de entidad que terminó con este aspecto:
Project
|
---->ProjectResources
|
---->Resource
Tengo un repositorio que devuelve un Proyecto:
public interface IProjectRepository
{
Project GetProject(int id);
}
Y una acción de controlador:
public ActionResult Edit(int id)
{
Project project = projectRepository.GetProject(id);
return View(project);
}
Esto no parece funcionar muy bien cuando intento y PUBLICAR esta información. Obtenía un error EntityCollection ya inicializado cuando intentaba reconstruir la colección ProjectResources.
creo que es más inteligente para crear un modelo de dominio que es un poco más simple:
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; }
}
Esto parece ser un poco más agradable ya que también no tengo los intermedios ProjectResources -> salto de recursos. ProjectResource tendría los campos que necesito. En vez de hacer algo como:
@foreach(var resource in Model.ProjectResources) {
@Html.DisplayFor(m => m.Resource.FirstName)
}
que puedo hacer:
@foreach(var resoure in Model.Resources) {
@Html.DisplayFor(m => resource.FirstName);
}
Mi pregunta es la siguiente ¿Debo estar regresando a mi modelo de dominio de mi repositorio o debería que ser manejado por el controlador o alguna otra clase en el medio? Si se maneja en el controlador por algo que mapea mi proyecto a un ProjectEdit, ¿qué aspecto tendría?
¿Está diciendo que mi repositorio debería devolver los modelos de dominio y no los modelos de entidad? – Dismissile
Si su Repositorio no está encapsulado dentro de un servicio separado, sí. –