可以在NHibernate上覆盖属性的映射类型(hbm.xml文件,不流畅)吗?
上下文: 我正在研究基本上连接SQL Server(LEGACY DATABASE SCHEMA)的应用程序,但它也必须适用于某些Oracle数据库。我们有很多实体,我们已经丢弃以保留两个版本的映射文件,因此我们决定定义基本映射(SQL Server)并进行一些指导性修改以便在Oracle上工作(如id生成器,列和表名,...)。
现在我们在LONG Oracle字段(LEGACY OBSOLETE FIELD TYPE)中遇到了新问题,它没有在NHibernate上工作,我们必须定义一个Custom IUserType(http://sonyarouje.com/2012/11/07/nhibernate-and-oracle-long-varchar-field/),这个解决方案与SQLServer兼容但它需要DLL Oracle.DataAccess.dll,为了避免这个有问题的DLL,我们只有在我们在Oracle上连接时才会在运行时设置这个自定义类型。但是会员资格类型(NHibernate)是只读的,我还没有找到任何设置方法。
我正在使用NHibernate 3.3。
答案 0 :(得分:0)
我们应该区分ISessionFactory
和NHibernate配置。
通常,我们可以根据需要在运行时创建多个配置。这里简要介绍了动态操作:
3.1. Programmatic Configuration
但是一旦我们使用配置来接收ISessionFactory
- 它就无法更改:
NHibernate.Cfg.Configuration的实例表示应用程序的.NET类型到SQL数据库的整个映射集。 配置用于构建(不可变的)ISessionFactory。映射是从各种XML映射文件编译的。
所以,我想说,在这种情况下,我们可以从更多配置(可以非常动态地创建)创建更多工厂。这可以解决问题,基于环境...从某些条件/配置我们将知道使用哪个NHibernate配置...这将给我们适当的工厂。