我目前正在升级一些底层库。我从NHibernate 3.1.0.4000转到3.3.1.4000,FluentNHibernate 1.2.0.712转到1.4.0.0
查询失败,因为自动化似乎不像过去那样发生。期望Property ObjectRecordId被自动化到object_record_id。我可以覆盖自动化并且有效:
public class ProcessLockMap : IAutoMappingOverride<ProcessLock>
{
public void Override(AutoMapping<ProcessLock> mapping)
{
mapping.Map(x => x.ObjectRecordId).Column("object_record_id");
mapping.Map(x => x.LockedBy).Column("locked_by");
mapping.Map(x => x.LockedOn).Column("locked_on");
mapping.Map(x => x.LockerId).Column("locker_id");
}
}
我们的配置类如下所示:
var domainAssembly = typeof (MyEndpoint).Assembly;
var sessionFactory = Fluently.Configure()
.Database(MyPersistenceConfiguration.FromConfig)
.Mappings(
m =>
{
m.AutoMappings
.Add(new AutoPersistenceModel(new AutoMappingConfiguration())
.AddEntityAssembly(domainAssembly)
.ApplyDefaults()
.UseOverridesFromAssembly(domainAssembly));
m.HbmMappings.AddFromAssembly(domainAssembly);
})
.BuildConfiguration()
.AddDefaultCustomMethodCalls()
.BuildSessionFactory();
这就是我们过去成功实现流畅自动化的方法。我不确定在v1.2和v1.4之间会发生什么变化会导致这种情况无法正常工作。
有什么想法吗?
一些额外的信息...... 当服务总线启动时,我在日志中看到以下内容:NHibernate.Cfg.Configuration在程序集中找不到映射文件
另外需要注意的是,我们为域使用了一个基础框架,其中包含FluentNHibernate.Cfg.Db.PersistenceConfiguration的实现,它创建了如下所示的配置:var config = new MyPersistenceConfiguration()
.Driver(domainConfig.Driver)
.Dialect(domainConfig.Dialect)
.Provider(domainConfig.Provider)
.ProxyFactoryFactory(domainConfig.ProxyFactoryFactory)
.ConnectionString(domainConfig.ConnectionString);
ProxyFactoryFactory方法在3.1中标记为Obsolete,在3.3中删除。我们正在使用Castle作为容器,但Castle和NHibernate似乎不再支持代理了。该方法描述了&#34;移动到FluentConfiguration(Fluently.Configure()。ProxyFactoryFactory(...))&#34;,但我不确定如何实现它。