2011-06-24 2 views
5

Si vous avez utilisé Entity Framework, vous savez que l'EDMX est cool. Vous savez aussi qu'il peut devenir énorme et presque ingérable.Décision de conception: fichiers EF EDMX multiples

Quand il est grand, il est tentant de créer une deuxième ou troisième EDMX - même un pour chaque schéma dans la base de données (comme un exemple).

Un tel seperation contribuerait à l'organisation de votre EDMX, mais il pourrait séparer le contexte des entités dans le même espace.

De plus, les fichiers séparés EDMX peut créer une situation où une opération JOIN dans les fichiers EDMX résultats en communication de base de données excessive, redondante. Mais, force est de constater que plus l'EDMX est grand, plus il est difficile à utiliser. Le plus difficile est de s'assurer que c'est correct. Le plus facile c'est de casser.

Est-ce que vous cassez vos fichiers EDMX? Avez-vous une règle générale pour quand?

Répondre

1

Un exemple pour la nécessité de diviser votre EDMX serait si vous avez un groupe d'entités qui sont utilisés dans plus d'un projet, tandis que d'autres sont des projets spécifiques et vous êtes prêt à abandonner ayant des propriétés de navigation entre le parties (et restent avec uniquement les FK exposés).

Vous pouvez fusionner automatiquement les EDMXs en un si vous voulez maintenir la séparément, mais les ouvrir un contexte à tous et demande que celui-ci. Cela nécessite qu'ils partagent le même espace de noms.

+0

Je vois; réutiliser un EDMX sur plusieurs projets. C'est une bonne raison pour diviser l'EDMX. Nous n'avons pas encore atteint ce scénario. –

1

Nous avons seulement allés aussi loin que besoin d'utiliser deux EDMX séparés en une seule solution. Cette séparation s'est produite pour nous avec un EDMX pour les entités modèles spécifiques au domaine et une autre pour celles plus communes dans toutes nos solutions (le paiement comme exemple). Logiquement, vous pourriez dire que cela pour nous était au niveau du schéma db bien que ce n'était pas la règle dure de la séparation.

Alors que nous n'avions pas besoin de jointures entre eux, nous avions besoin de transactions. Nous avons accompli ceci avec un UnitOfWorkContainer réutilisable qui emballerait les contextes d'EF dans un TransactionScope. Les contextes seraient injectés via DI dans le conteneur et nous n'utiliserions le TransactionScope que s'il y avait plus d'un contexte dans le conteneur.

Le conteneur lui-même mis en œuvre notre interface IUnitOfWork il était mort facile à brancher sur la base de code existante.

Questions connexes