ESFramewor使用技巧(2)-- 在插件中使用NHibernate
来源:互联网 发布:可以制作软件的软件 编辑:程序博客网 时间:2024/06/03 11:56
好了,我们决定在那个需要数据访问的插件中使用NHibernate来实现数据层,但是问题来了--当我们为应用程序添加一个默认的App.Config配置文件时,在应用程序启动的时候NHibernate会自动去解析这个文件的相关配置,而与应用程序不一样的是,我们也可以为插件添加一个App.Config配置文件,但是FS在加载这个插件的时候,NHibernate不会去触碰这个插件对应的App.Config,这样NHibernate就无法自动完成配置。所以,我们必须手动的解决这个问题。
幸好,NHibernate.Cfg.Configuration的SetProperties()方法可以允许我们将配置内容添加到NHibernate中。既然,插件的App.Config不起作用,所以干脆我们用一个自定义的配置文件好了,其中加入Nhibernate配置:
<configuration>
<ESFrameworke>
<DataBaseType>Oracle</DataBaseType>
</ESFrameworke>
<nhibernate>
<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="hibernate.connection.driver_class" value="NHibernate.Driver.OracleClientDriver" />
<add key="hibernate.connection.connection_string" value="user id=jjaj;data source=ORCL;password=gsaj" />
<add key="hibernate.connection.isolation" value="ReadCommitted"/>
<add key="hibernate.dialect" value="NHibernate.Dialect.Oracle9Dialect" />
</nhibernate>
</configuration>
配置文件添加之后,我们需要自己手动解析它,使用XPath可以非常容易获取配置文件中的Nhibernate配置部分:
{
string xPath = string.Format("/configuration/nhibernate/add") ;
XmlNodeList list = XmlDoc.SelectNodes(xPath) ;
IDictionary dic = new Hashtable() ;
foreach(XmlNode node in list)
{
dic.Add(node.Attributes.Item(0).InnerText ,node.Attributes.Item(1).InnerText) ;
}
return dic ;
}
当插件被加载的时候的时候,插件读取这个配置并初始化NHibernate的SessionFactory。但是如何切入插件加载的时刻了?你一定还记得,插件IAddin接口中的OnLoading方法--就是它了,在其中加入类似下面的代码:
Configuration config = new Configuration();
config.SetProperties(dic) ;
config = config.AddAssembly("BusinessManagerAddin") ;
ISessionFactory factory = config.BuildSessionFactory();
本文解决的只是一个简单的在Dll(插件也是Dll)中进行NHibernate配置的问题,但是本文更是为了说明一种思想,那就是,在最小的范围内解决问题(如果可以的话),而不是将问题蔓延到更大的范围。上面所说的插件中的NHibernate配置、初始化完全可以在FS中进行,但是如果这样做,不仅使得FS难于理解(因为FS根本不会使用这个配置的SessionFactory),而且FS还需要将SessionFactory引用通过某种方式传递到插件中,这违反插件“自治”原则,使得FS不再单纯,而且与插件的关系也将日趋复杂。
附录(2006.06.07):如何使用CodeSmith协助NHibernate实体类与.hbm.xml文件自动生成
今天重装机后,重装了CodeSmith,结果忘记了如何让CodeSmith协助NHibernate,摸索了一会才搞定,现记录下来作以后参考。
(1)CodeSmith使用 V2.5
(2)将NHibernateTemplate整个文件夹放到C:/Program Files/CodeSmith/v2.5/Samples下。
(3)提供对Oracle的支持。用VS2003打开OracleNativeSchemaProvider项目,项目需要引用SchemaExplorer.dll,可在C:/Program Files/CodeSmith/v2.5下找到该文件。重新编译后,将编译生成的SchemaExplorer.OracleNativeSchemaProvider.dll和SchemaExplorer.OracleNativeSchemaProvider.dll.config文件拷贝C:/Program Files/CodeSmith/v2.5下,重新打开CodeSmith可。
(4)NHibernate配置示例:
<section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="hibernate.connection.driver_class" value="NHibernate.Driver.OracleClientDriver" />
<add key="hibernate.connection.connection_string" value="user id=XTGL;data source=ORCL;password=GSGL" />
<add key="hibernate.connection.isolation" value="ReadCommitted"/>
<add key="hibernate.dialect" value="NHibernate.Dialect.Oracle9Dialect" />
</nhibernate>
(5)使用SessionQuicker操作NHibernate数据层。
转到 :ESFramework 可复用的通信框架(序)
- ESFramewor使用技巧(2)-- 在插件中使用NHibernate
- ESFramewor使用技巧(3) -- 在插件中使用Spring.net
- 在Castle ActiveRecord中使用NHibernate
- 在ASP.NET中使用NHibernate
- 在ASP.NET中使用NHibernate
- 在ASP.NET中使用NHibernate
- 在NHibernate中使用memcache二级缓存
- 在NHibernate中使用memcache二级缓存
- 在Window Form中使用NHibernate
- NHibernate中使用事务
- 。net中使用NHibernate
- 在C#中使用NHibernate框架查询数据
- SQLite3 与 NHibernate 在 .NET 程序中使用
- 在NHibernate中使用Devart dotConnect For Oracle
- 在C#中使用NHibernate框架查询数据
- 在ASP.NET中使用NHibernate(第一季)
- 在C#中使用NHibernate框架查询数据
- nhibernate使用(补充)
- 撤销与反撤销 功能实现
- 待解决的问题,谁帮忙点破下!
- ESFramework使用技巧(1)-- ESFramework 日志记录器的自动装配
- 使用NHibernate的你也许需要SessionQuicker
- ESFramework介绍之(26)-- 支持复杂插件(InnerDealer 和 InnerDispatcher)
- ESFramewor使用技巧(2)-- 在插件中使用NHibernate
- ESFramework应用示例--可复用的FS
- 初试Ajax.Net !
- ESFramework介绍之(24)―― 日志记录IEsbLogger
- ESFramework介绍之(23)―― AgileTcp
- ESFramework介绍之(22)―― 服务器系统自动升级
- ESFramework介绍之(21)-- Tcp组件接口ITcp介绍
- 当你拥有一把用得顺手的锤子
- 将权限引入系统的探索