Nhibernate 3.0 cookbook学习笔记 配置与架构
NHibernate項目中都有App.config,主要是用來配置項目中的日志與數據庫等。
典型的App.config配置文件(這里包括log4net):
View Code <?xml version="1.0" encoding="utf-8" ?> <configuration><configSections><!--定義配置節點--><section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/><section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/></configSections><connectionStrings><!--配置數據庫--><add name="db" connectionString="Data Source=.;Initial Catalog=NHCookbook;Integrated Security=True"/></connectionStrings><log4net><appender name="trace"type="log4net.Appender.TraceAppender, log4net"><layout type="log4net.Layout.PatternLayout, log4net"><param name="ConversionPattern"value=" %date %level %message%newline" /></layout></appender><root><level value="ALL" /><appender-ref ref="trace" /></root><logger name="NHibernate"><level value="INFO" /></logger><!--<logger name="MyApp.Project.SomeNamespace.Foo"><level value="WARN" /></logger>--><logger name="NHibernate.SQL"><level value="DEBUG" /></logger></log4net><hibernate-configurationxmlns="urn:nhibernate-configuration-2.2"><session-factory><!--指定代理工廠類--><property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory,NHibernate.ByteCode.Castle</property><!--數據庫類型--><property name="dialect">NHibernate.Dialect.MsSql2008Dialect,NHibernate</property><!--數據庫名--><property name="connection.connection_string_name">db</property><!--數據庫并發數--><property name="adonet.batch_size">100</property><!--映射的類名--><mapping assembly="Eg.Core"/></session-factory></hibernate-configuration> </configuration>一些配置節點說明(水平有限就不翻譯了,直接貼書上的表格):
| Property name | Description |
| connection.provider | Provider class to open and close database connections. |
| connection.driver_class | This is specific to the RDBMS used, and is typically set by the dialect. |
| connection.connection_string | Database connection string. |
| connection.connection_string_ name | Name of connection string in <connectionStrings> element. |
| connection.isolation | Transaction isolation level. |
| dialect | Required. A class to build RDBMS-specific SQL strings. Typically, this is one of the many dialects from the NHibernate.Dialect namespace |
| show_sql | Boolean value. Set to true to log all SQL statements to Console.Out. Alternatively, log4net may be used to log to other locations |
| current_session_context_class | Class to manage contextual sessions |
| query.substitutions | Comma-separated list of translations to perform on query strings. For example, True=1, Yes=1, False=0, No=0. |
| sql_exception_converter | Class to convert RDBMS-specific ADO.NET Exceptions to custom exceptions |
| prepare_sql | Boolean value. Prepares SQL statements and caches the execution plan for the duration of the database connection. |
| command_timeout | Number of seconds to wait for a SQL command to complete before timing out. |
| adonet.batch_size | Number of SQL commands to send at once before waiting for a response from the database |
| generate_statistics | Enables tracking of some statistical information, such as the number of queries executed and entities loaded |
| proxyfactory.factory_class | Required. Specifies a factory class for our chosen proxy framework, in this case Castle DynamicProxy2 |
| format_sql | Adds line endings for easier-to-read SQL statements |
順便貼一下Nhibernate的數據訪問架構:
?
將hibernate-configuration配置在單獨的文件中
我們也可以將App.config中的hibernate-configuration節點抽取出來,單獨配置在另一個XML文件中,并將該XML文件的屬性,復制到輸出目錄設置為:如果較新復制。
?
利用代碼配置hibernate-configuration
我們也可以通過代碼來配置hibernate-configuration節點中的內容.
App.config文件還是要的:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="db" connectionString="Server=.\SQLExpress; Database=NHCookbook; Trusted_Connection=SSPI"/> </connectionStrings> </configuration>然后在Program.cs代碼中先引用命名空間:
using NHibernate.ByteCode.Castle; using NHibernate.Cfg; using NHibernate.Cfg.Loquacious; using NHibernate.Dialect;在Main方法中增加如下代碼:
var nhConfig = new Configuration() .Proxy(proxy => proxy.ProxyFactoryFactory<ProxyFactoryFactory>()) .DataBaseIntegration(db => { db.Dialect<MsSql2008Dialect>(); db.ConnectionStringName = "db"; db.BatchSize = 100; }) .AddAssembly("Eg.Core"); var sessionFactory = nhConfig.BuildSessionFactory(); Console.WriteLine("NHibernate Configured!"); Console.ReadKey();注意:DataBaseIntegration是一個擴展方法,要引用NHibernate.Cfg.Loquacious命名空間。
?
利用Fluent NHibernate
App.config:
<?xml version="1.0" encoding="utf-8" ?> <configuration><connectionStrings><add name="db" connectionString="Server=.\SQLExpress; Database=NHCookbook; Trusted_Connection=SSPI"/></connectionStrings> </configuration>增加代碼:
using Eg.FluentMappings.Mappings; using FluentNHibernate.Cfg; using FluentNHibernate.Cfg.Db; using NHibernate.ByteCode.Castle; var nhConfig = Fluently.Configure() .Database(MsSqlConfiguration.MsSql2008 .ConnectionString(connstr => connstr.FromConnectionStringWithKey("db") ) .ProxyFactoryFactory<ProxyFactoryFactory>() .AdoNetBatchSize(100) ) .Mappings(mappings => mappings.FluentMappings .AddFromAssemblyOf<ProductMapping>() ) .BuildConfiguration(); var sessionFactory = nhConfig.BuildSessionFactory(); Console.WriteLine("NHibernate configured fluently!"); Console.ReadKey();利用ConfORM Mappings
App.config:
View Code <?xml version="1.0" encoding="utf-8" ?> <configuration><configSections><section name="hibernate-configuration"type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/></configSections><connectionStrings><add name="db" connectionString="Server=.\SQLExpress; Database=NHCookbook; Trusted_Connection=SSPI"/></connectionStrings><hibernate-configurationxmlns="urn:nhibernate-configuration-2.2"><session-factory><property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory,NHibernate.ByteCode.Castle</property><property name="dialect">NHibernate.Dialect.MsSql2008Dialect,NHibernate</property><property name="connection.connection_string_name">db</property><property name="adonet.batch_size">100</property></session-factory></hibernate-configuration> </configuration>增加代碼:
using Eg.ConfORMMapping.Mappings; using NHibernate.Cfg; var mappingFactory = new MappingFactory(); var mapping = mappingFactory.CreateMapping(); var nhConfig = new Configuration().Configure(); nhConfig.AddDeserializedMapping(mapping, null); var sessionFactory = nhConfig.BuildSessionFactory(); Console.WriteLine("NHibernate configured!"); Console.ReadKey();?
轉載于:https://www.cnblogs.com/Gyoung/archive/2012/05/24/2510937.html
總結
以上是生活随笔為你收集整理的Nhibernate 3.0 cookbook学习笔记 配置与架构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 获得md5加密后的字符串
- 下一篇: 设计模式笔记(19)---观察者模式(行