Przechodzę przez samouczki (szczególnie te przy użyciu Linq-To-Entities) i rozumiem podstawowe pojęcia, jednak niektóre rzeczy dają mi problemy.Czy moja aplikacja ASP.NET MVC ma właściwą strukturę?
Samouczki zazwyczaj dotyczą tylko prostych modeli i formularzy, które wykorzystują jedynie proste instrukcje tworzenia, aktualizowania i usuwania. Moje są nieco bardziej skomplikowane i nie jestem pewien, czy podążam tą drogą we właściwy sposób, ponieważ kiedy przychodzi czas na obsługę relacji pół tuzina obiektów bazy danych, samouczki przestają pomagać.
Dla metody post, zwykły sposób wykonywania operacji CRUD
entities.AddToTableSet(myClass);
entities.SaveChanges();
nie zrobi tego, co chcę, bo w pełni wdrożone klasa nie jest uzyskiwanie wysłana do metody kontrolera. Mogę umieszczać pojedyncze pola, tworzyć kolekcje lub wiele obiektów DTO, a następnie wywoływać metodę w usłudze lub repozytorium, aby pobierać informacje, które otrzymuję z postu formularza, wraz z informacjami, których potrzebuje do zapytania lub utworzenia się, a następnie od wszystkie te rzeczy, utwórz mój obiekt bazy danych, który mogę zapisać.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(int id, [Bind(Exclude = "Id")] ClassA classA,
[Bind(Exclude = "Id")]ClassB classB)
{
// Validation occurs here
if(!ModelState.IsValid)
return View();
try
{
_someRepositoryOrService.Add(id, classA, classB);
return RedirectToAction("Index", new { id = id });
}
catch(Exception ex)
{
// Logging and exception handling occurs here
}
}
public void Add(int id, ClassA classA, ClassB classB)
{
EntityA eA = new EntityA
{
// Set a bunch of properties using the two classes and
// whatever queries are needed
};
EntityB eB = new EntityB
{
// Set a bunch of properties using the two classes and
// whatever queries are needed
};
_entity.AddToEntityASet(eA);
_entity.AddToEntityBSet(eB);
_entity.SaveChanges();
}
Czy poprawiam to poprawnie, czy też dnuję ramę? Nigdy nie używam obiektu podmiotu bezpośrednio, ilekroć pytam o jedno, umieszczam potrzebne informacje w DTO i opieram moje widoki z tego. To samo dotyczy stworzenia. Czy jest to dozwolone, czy też moje unikanie korzystania z podmiotów bezpośrednio sprzecznych z celem korzystania z tej struktury?
Edycja: Jestem również zaniepokojony tym podejściu, ponieważ wymaga pustych konstruktorów właściwie dzieje zapytań LINQ powodu tego komunikatu o błędzie:
tylko konstruktorzy bez parametrów i inicjalizatory są obsługiwane w LINQ do Podmioty .
To nie jest wielka sprawa, ponieważ rzadko potrzebuję logiki w konstruktorach, ale czy to nie jest kwestia konstruktorów i tylko właściwości publicznych?
Tekst kontekstowy użyty przez Linq do Entities używa odbicia, aby utworzyć obiekty z odwzorowania danych, soit jest ważny i wymaga, aby wszystkie elementy miały konstruktor bez parametrów, dzięki czemu można go zainicjować, a jeśli chcesz móc serializować typy, będzie potrzebował także publicznego konstruktora. – dmportella