J'ai eu une expérience très limitée avec EF (quelques billets de blog et tutoriels), mais beaucoup d'expérience avec NHibernate.
Microsoft est constamment derrière le mouvement OpenSource, et c'est certainement le cas avec NHibernate. Lorsque EF 1.0 a été publié pour la première fois, il a manqué de support pour les fonctionnalités clés telles que le support POCO et l'ignorance de persistance, il a fallu que vos classes d'entités étendent une classe d'entité de EF, donc vos classes d'entités n'étaient pas complètement découplées. Cela a permis de maintenir la maintenabilité et la testabilité de l'unité, ainsi que la possibilité de changer de fournisseur ORM en cas de besoin. D'autre part, NHibernate vous a permis de découpler complètement vos entités de NHibernate elle-même. EF 4.0 a rattrapé quelque peu à cet égard, son approche Code First Development (recently announce by Scott Guthrie) est un pas dans la bonne direction. NHibernate possède lui-même des capacités de mappage très puissantes telles que le mappage d'héritage, le mappage de classes de composants (objet Address sur une entité Customer), le mappage d'association d'entité unidirectionnelle. Il vous permet de tirer pleinement parti de la puissance de la programmation orientée objet (encapsulation, polymorphisme, héritage, etc.) à l'intérieur de votre modèle de domaine, pensez à vos classes d'entités comme comportement d'encapsulation et pas seulement aux conteneurs de données. Si vous aspirez à construire votre modèle de domaine selon les principes de Domain Driven Design, alors NHibernate est un très bon ajustement pour cela. Je ne peux pas parler directement sur EF 4.0 sur ces points, seulement d'après ce que j'entends d'autres utilisateurs de NHibernate essayant d'utiliser EF 4.0, mais EF 4.0 est toujours à la traîne dans ces domaines, mais il gagne du terrain.
Bonne question. Très pertinent pour beaucoup d'entre nous. Je vais regarder celui-ci pour les réponses de ceux qui ont plus d'expérience avec les deux. –
Je suis un peu curieux de savoir quelles sont vos exigences et comment vous avez réduit vos choix à ces deux options par rapport à d'autres. Des réflexions sur LINQ to SQL ou iBATIS.NET? Il suffit de le jeter là: http://stackoverflow.com/questions/694552/what-is-the-difference-between-nhibernate-and-ibatis-net –
Linq to SQL est un produit mort. iBatis est conçu autour des procs stockés. –