2009-05-27 7 views
13

Dans mon application ASP.NET, je souhaite implémenter une couche d'accès aux données à l'aide de l'entité framweok afin de pouvoir l'utiliser en tant qu'outil ORM. Mais je ne veux pas que le reste de l'application se soucie que je l'utilise ou soit pollué par quelque chose de spécifique à l'image frameowrk.Utilisation de Entity Framework comme couche d'accès aux données

Je n'arrive pas à trouver quelqu'un qui utilise le framework d'entité exclusivement dans leur couche d'accès aux données, donc je suis impatient de voir des exemples en ligne de cette expérience/expérience.

+0

DAL de Stackoverflow: http://blog.stackoverflow.com/2008/09/what-was-stack-overflow-built-with/ –

Répondre

2

J'ai utilisé Entity Framework comme l'accès aux données sur mes deux derniers projets. Ce sont de grands projets (pour moi au moins) avec plusieurs centaines de tables, 5-15 développeurs qui durent plus d'un an.

Dans les deux projets, nous avons une interface WCF dans notre couche de service. Nous ne voulions pas utiliser les objets Entity Framework dans nos contrats WCF. Nous avons donc créé des objets de transfert de données, et nous mappons entre les objets DTO et Entity Framework.

Cela interrompt les dépendances et maintient les contrats aussi stables que possible, mais crée du travail supplémentaire. En fonction de votre horizon temporel, je ferais comme ça ou utiliser les objets POCO dans la prochaine version, comme Kieth l'a mentionné.

2

L'EF ou tout autre ORM (c'est-à-dire NHibernate) ne remplace pas votre couche d'accès aux données. Plutôt, l'ORM est une couche d'abstraction de la couche d'accès au contenu vers la source de données.

Ne vous laissez pas berner pour croire que l'EF élimine le DAL. L'EF est juste un autre cadre de source de données. Cependant, dans la meilleure pratique, vous voulez toujours abstraire et centraliser tous les accès (lecture/écriture) dans une couche d'accès numérique commune.

Voici un exemple parfait de ce dont je parle. Supposons que vous devez supprimer un utilisateur donné dans l'un de vos cas d'utilisation. Toutefois, lors de la suppression de l'utilisateur, vous pouvez supprimer d'autres enregistrements associés à l'utilisateur supprimé pour éviter les enregistrements orphelins (Pour être honnête avec vous, j'utiliserai un proc stocké pour cela). Maintenant, ce cas d'utilisation est bloqué dans certains BO qui sont très spécifiques à ce cas d'utilisation et la suppression en tant qu'utilisateur n'est qu'une partie du cas d'utilisation total.

À un moment donné, vous avez demandé à un développeur d'incorporer un cas d'utilisation différent qui impliquait la suppression d'un utilisateur! Le développeur peut faire quelques choses. 1) Il pourrait créer un nouveau cas d'utilisation qui implique maintenant la suppression d'un utilisateur mais a oublié de supprimer tous les enregistrements associés à cet utilisateur. 2) Il a peut-être remarqué le précédent cas d'utilisation mais ne pouvait pas l'utiliser directement sans trop généraliser pour son cas d'utilisation, il a donc décidé de copier une partie de ce cas d'utilisation qui supprime correctement un utilisateur et ses enregistrements associés dans son cas d'utilisation . Maintenant, nous avons des pièces qui dupliquent le code qui fait pratiquement la même chose - supprimer un utilisateur. Yuk! Maintenant, après avoir mis cette «suppression d'utilisateur», disons un DAL.Utilisateurs assistant classe, vous évitez cette mauvaise pratique de conception. Quoi qu'il en soit, ce qui est bien avec l'EF, cela réduit le nombre d'Entités Métiers que j'ai créé manuellement et fournit une vue différente des données d'un niveau d'application que ce que l'on voit au niveau du magasin de données.

Questions connexes