2009-08-04 14 views
2

Ich möchte eine DLL erstellen (auf die von einem Webdienst und möglicherweise von einer anderen Anwendung durch Automatisierung zugegriffen werden soll).Verwenden von NHibernate in einer DLL

Gibt es irgendeine Möglichkeit mit NHibernate innerhalb dieser DLL (also Zugriff auf die DLL durch Automatisierung würde funktionieren)?

Ich verwende bereits NHibernate in einer Rich-Client-Anwendung und es ist sehr praktisch, aber ich muss einige Änderungen an der app.config für diese vornehmen. Alle anderen Tutorials, die ich sehe, verwenden NHibernate direkt im Web-Service - und ändern die web.config entsprechend.

Antwort

3

Wenn Sie NHibernate in Code konfigurieren und nicht mit app.config oder web.config, sollten Sie das von Ihnen beschriebene Problem vermeiden können. Zum Beispiel könnten Sie Fluent NHibernates Funktion Fluent Configuration verwenden, um NHibernate zu konfigurieren und somit die Verwendung von sowohl web.config als auch hibernate.cfg.xml zu vermeiden, was möglicherweise auch einige Probleme verursachen könnte.

Ich verwende diesen Ansatz derzeit in einer Webanwendung, bei der sich die Datenzugriffsebene in einer separaten Assembly befindet und die Webassembly keinen Verweis auf NHibernate enthält und weder web.config noch eine hibernate.cfg geändert werden muss. XML-Datei verwendet. Hier

ist ein Beispiel für eine Fluent Konfiguration:

sessionFactory = Fluently.Configure() 
    .Mappings(x => x 
     .FluentMappings.AddFromAssemblyOf<FooMap>() 
     .ConventionDiscovery.AddFromAssemblyOf<BarConvention>() 
     ) 
    .Database(MsSqlConfiguration.MsSql2005.ConnectionString(x => x 
     .Database("YourDbName") 
     .Server(@".\SQLEXPRESS") 
     .TrustedConnection()) 
     .ShowSql()) 
    .BuildSessionFactory(); 

Update:

Das gleiche Ziel soll es möglich sein, zu erreichen nur Standard NHibernate, durch ihre programmatischen Konfigurationsmöglichkeiten verwenden. Anstatt die web.config oder so zu verwenden, um Ihre Datenbankverbindung usw. zu konfigurieren, könnten Sie eine IDictionary-Instanz an Configuration.SetProperties() übergeben, wenn Sie Ihre Sitzungsfactory erstellen.

Etwas wie folgt aus:

Configuration config = new Configuration(); 

IDictionary properties = new Hashtable(); 
properties["hibernate.dialect"] = "NHibernate.Dialect.MsSql2005Dialect"; 
// more properties here ... 

config.SetProperties(properties); 

Chapter 3 der docs hat einige Informationen darüber, aber es ist ein bisschen auf der kurzen Seite.

+0

Nun, ich habe Fluent NHibernate nie benutzt - aber das sieht gut aus. Ich würde eine Antwort ohne Fluent bevorzugen. Wir verwenden derzeit die Mapping-Attribute und dann generieren wir die Dateien - aber wenn ich hier keine andere Lösung bekomme, wird Ihre Antwort sicher akzeptiert ... – bernhardrusch

+0

Vielen Dank für Ihre weitere Untersuchung! – bernhardrusch

+0

Kein Problem, froh, dass ich helfen konnte –

Verwandte Themen