J'ai suivi les tutoriels (en particulier ceux utilisant Linq-To-Entities) et je comprends les concepts de base, cependant certaines choses me posent problème.
Les tutoriels impliquent généralement uniquement des modèles simples et des formulaires utilisant uniquement des instructions de création, de mise à jour et de suppression de base. Les miens sont un peu plus compliqués, et je ne suis pas sûr de la manière dont je m'y prends parce que lorsque vient le moment de gérer les relations entre une demi-douzaine d'objets de base de données, les tutoriels s'arrêtent.
Pour la méthode de publication, la méthode habituelle pour effectuer des opérations CRUD
entities.AddToTableSet(myClass);
entities.SaveChanges();
Ne fera pas ce que je veux, car une classe entièrement implémentée n'est pas envoyée à la méthode du contrôleur. Je peux envoyer des champs individuels, des collections de formulaires, ou plusieurs objets DTO et ensuite appeler une méthode sur un service ou un dépôt pour prendre les informations que je reçois d'une publication de formulaire, avec les informations dont il a besoin pour interroger ou créer lui-même, et ensuite à partir de toutes ces choses, créer mon objet de base de données que je peux enregistrer.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Add(int id, [Bind(Exclude = "Id")] ClassA classA,
[Bind(Exclude = "Id")]ClassB classB)
{
// La validation se fait ici
if(!ModelState.IsValid)
return View();
try
{
_someRepositoryOrService.Add(id, classA, classB);
return RedirectToAction("Index", new { id = id });
}
catch(Exception ex)
{
// La journalisation et la gestion des exceptions se font ici
}
}
public void Add(int id, ClassA classA, ClassB classB)
{
EntityA eA = new EntityA
{
// Définir un tas de propriétés en utilisant les deux classes et
// toutes les requêtes nécessaires
};
EntityB eB = new EntityB
{
// Définir un tas de propriétés en utilisant les deux classes et
// toutes les requêtes nécessaires
};
_entity.AddToEntityASet(eA);
_entity.AddToEntityBSet(eB);
_entity.SaveChanges();
}
Suis-je en train de gérer cela correctement ou en train de dénaturer le framework? Je n'utilise jamais vraiment un objet entité directement, chaque fois que j'en interroge un je mets les informations dont j'ai besoin dans un DTO et base mes Vues là-dessus. Il en va de même pour la création. Est-ce permis, ou mon évitement d'utiliser directement des entités va-t-il à l'encontre du but d'utilisation du framework?
Édition : Je suis également préoccupé par cette approche car elle nécessite des constructeurs vides pour effectuer correctement les requêtes LINQ en raison de ce message d'erreur :
Seuls les constructeurs sans paramètres et les initialiseurs sont pris en charge dans LINQ to Entities.
Ce n'est pas un gros problème puisque je n'ai rarement besoin de logic dans les constructeurs, mais est-ce un problème de ne pas avoir de constructeurs et uniquement des propriétés publiques?