Utworzyłem repozytorium, które zwraca dane z mojej bazy danych za pomocą Entity Framework i muszę dostarczyć te dane do mojego widoku, ale zanim to zrobię, muszę przekonwertować te obiekty na moje model domeny.Repozytorium MVC - Model domeny a model podmiotu
Mój schemat wygląda tak:
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
I generowane modelu podmiotu, który zakończył się wyglądać jak ten:
Project
|
---->ProjectResources
|
---->Resource
Mam repozytorium, które zwraca Projekt:
public interface IProjectRepository
{
Project GetProject(int id);
}
A działanie kontrolera:
public ActionResult Edit(int id)
{
Project project = projectRepository.GetProject(id);
return View(project);
}
Nie wydaje się to działać bardzo dobrze, gdy próbuję i POST tych danych. Otrzymałem już zainicjowany błąd EntityCollection podczas próby odtworzenia kolekcji ProjectResources.
myślę, że jest mądrzejszy, aby utworzyć model domeny, która jest trochę prostsza:
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; }
}
To wydaje się być trochę ładniejszy od ja też nie mają pośrednie ProjectResources -> skok zasobów. ProjectResource miałby pola, których potrzebuję. Zamiast robić coś takiego:
@foreach(var resource in Model.ProjectResources) {
@Html.DisplayFor(m => m.Resource.FirstName)
}
mogę zrobić:
@foreach(var resoure in Model.Resources) {
@Html.DisplayFor(m => resource.FirstName);
}
Moje pytanie brzmi następująco powinienem wracać mojego modelu domeny z mojego repozytorium czy powinno być obsługiwane przez kontroler lub jakiejś innej klasy w środku? Jeśli jest on obsługiwany w kontrolerze przez coś, co odwzorowuje mój projekt na ProjectEdit, jak by to wyglądało?
Więc mówisz, że moje repozytorium powinno zwracać modele domen, a nie modele encji? – Dismissile
Jeśli repozytorium nie jest hermetyzowane w oddzielnej usłudze, tak. –