2013-08-26 1 views
0

Je suis nouveau à NHibernate et je pensais l'utiliser dans un projet qui pourrait supporter différentes bases de données (Oracle, MySQL, SQl Server, DB2 etc.) car ce produit pourrait être livré à différents clients qui pourrait utiliser différentes bases de données selon leur choix. Cependant, le schéma d'une base de données différente resterait le même.Plusieurs pilotes de base de données dans NHibernate

Comme nous savons que NHibernate offre de support de boîte à de nombreuses bases de données, j'ai ci-dessous doute

1) Faut-il installer spécifiquement les pilotes de base de données ou ils viennent avec la configuration NHibernate? 2) Est-il possible qu'en changeant seulement les paramètres de configuration, etc. mon application peut parler à différentes bases de données? Il n'y a pas de changement de code en dehors des paramètres de configuration si le code est envoyé au client qui pourrait utiliser une base de données Oracle/DB2/SqlServer, etc.

+0

Regardez les classes dans les espaces de noms 'NHibernate.Dialect' et' NHibernate.Driver'. Voir aussi http://nhforge.org/doc/nh/en/index.html#configuration-optional-dialects. Cela fonctionne "prêt à l'emploi" car vous n'avez pas besoin d'écrire de code pour le faire fonctionner. Vous devez évidemment avoir les classes de connexion ADO.NET appropriées (pilotes a.k.a.) référencées. A condition que ces classes soient disponibles, NHibernate pourra les utiliser. –

Répondre

0

répondre à vos questions:

1) Non, NHibernate ne est pas livré les conducteurs. Vous devez les chercher ailleurs. Moi, par exemple, utilise Npgsql avec PostgreSQL. Il est très possible en changeant votre pilote et votre chaîne de connexion de commencer à utiliser une base de données différente sans problèmes majeurs (en évitant également les mappages spécifiques à la db comme les séquences ou l'identité pour la génération d'identifiants). J'ai migré de SQL Server à PostgreSQL très récemment; Juste pour que vous ayez une idée du succès, le produit migré interrogeait plus de 70 tables avec les API HQL, Criteria et Linq de NHibernate et nous avons seulement eu un problème avec les classements différents dans les deux bases de données, ce qui ne concerne pas NHibernate du tout. À mon avis, tant que vous vous en tenez à NHibernate pour interroger, vous serez en sécurité.

Puisque vous laissez le choix de la base de données à votre client, je vous recommande de lister et de recommander seulement quelques bases de données sélectionnées. Vos clients pourraient simplement traverser un mauvais pilote, par exemple.

+0

Juste une question alors pourquoi disons-nous que NHibernate out of box supporte les bases de données mentionnées ci-dessus. On dit que EF out of box ne supporte que SQl Server alors que NHibernate supporte Db comme Oracle, MySQL, SQl Server, DB2. Ai-je manqué quelque chose. – Sarvesh

+0

Les pilotes doivent implémenter certaines fonctionnalités spécifiques à Entity Framework pour fonctionner avec. NHibernate a besoin de pilotes pour implémenter des fonctionnalités ADO.NET beaucoup plus basiques. Les deux peuvent fonctionner avec de nombreuses bases de données, mais les pilotes doivent être un peu plus "avancés" pour travailler avec Entity Framework. Consultez http://msdn.microsoft.com/en-us/data/dd363565.aspx pour les pilotes compatibles EF si vous le souhaitez. –

Questions connexes