J'ai écrit ce qui suit il y a quelque temps, mais je suis venu le revoir récemment, et je ne pense pas que ce soit un bon design.
La conception est pour une sorte de couche de base de données modulaire utilisant Entity Framework 4. Il existe un seul objet de base de données qui charge (paresseusement) les contextes de structure d'entité à partir de bibliothèques externes dans un emplacement spécifié, et les instances des contextes chargés sont stockées dans une table de hachage contre leur nom (EG "ContentMgmtContext").
Tout contact avec la base de données dans ce système se fait par le biais de procédures stockées. Pour appeler la base de données, la signature de la méthode de requête ressemble à ceci:
List<TReturn> Query<TReturn>(string Context,
string Procedure,
TransactionScope Scope,
List<ObjectParameter> QueryParameters)
Cette modularité est quelque chose que j'aime. Cependant, cette approche présente un inconvénient majeur: when using the database layer, the code using it has to have a reference to the library in which the context is stored, in order to access the types returned by the stored procedures through Entity Framework.
dans le modèle, les objets de la couche de base de données sont convertis en nouveaux objets que la vue et le contrôleur utilisent.
Je pense que c'est une mauvaise conception, mais comment puis-je l'améliorer? J'ai envisagé d'ajouter une interface vide comme IStoredProecedureObject
pour donner à chaque type de données retourné par une procédure stockée un type de base commun, mais cela semble être déjoué par Entity Framework. Chaque fois que le .edmx
fichier est recompilé, le code est généré à nouveau et tous les ajouts supprimés. Y a-t-il un moyen d'arrêter cela?
Comment puis-je améliorer cette conception? Quel (autre) problème? Ou suis-je sur la bonne voie?