升级的NHibernate和FNH DLL - 现在获得“No persister”异常

时间:2011-11-07 20:02:16

标签: nhibernate fluent-nhibernate nhibernate-mapping

我正在尝试将我的FNH Automapping项目升级到最新版本的NHibernate和Fluent NHibernate(NH 3.2和FNH 1.3),但是现在我在派生类上得到了“no persister”异常(尽管基类仍然似乎是坚持不懈的。)

这个派生类使用旧的dll(FNH 1.0,NH 2.1.2)自动执行 - 我没有以任何方式更改我的映射逻辑或这些类。

我通过将新dll复制到旧项目上来升级我的项目,并删除新dll对不再需要的dll(例如Antlr 3,Castle)的引用。

我正在使用的确切版本:

NHibernate 3.2.0.4000
FluentNHibernate 1.3.0.0
System.Data.SQLite 1.0.76.0
VS 2008 9.0.30729.1 SP
Windows XP SP3(32位)

与旧dll一起使用但不与新dll一起使用的映射代码:

            return AutoMap.Assemblies(_assemblies)
                // Don't map the abstract base class
                .IgnoreBase<OfeEntity>()

                // Only map subclasses of OfeEntity
                .Where(t => t.IsSubclassOf(typeof(OfeEntity)))

                .Conventions.Add(
                    // Do cascading saves on all entities so lists  will be
                    // automatically saved 
                    DefaultCascade.All(),

                    // Turn on lazy loading, so will only read data that is actually
                    // displayed
                    DefaultLazy.Always()
                );

修改

启用FNH诊断后,我可以看到FNH没有使用新dll为我的派生类创建表。

另外,我注意到一件事 - 没有被持久化的类被子类化为2级。也就是说,我有以下几个类:

public abstract class OfeEntity

public class OfeMeasurementBase : OfeEntity

public class OfeDlsMeasurement : OfeMeasurementBase

OfeDlsMeasurement是没有持久化的类。 OfeMeasurementBase以及其他几个继承自OfeEntity的类正在被持久化。

旧版本对此没有任何问题 - 当有多个级别的继承时,新版本可能有错误吗?

2 个答案:

答案 0 :(得分:1)

我将我们的项目从一些旧的(F)NH迁移到最新的NH 3.2。我怀疑它现在在集合中使用不同的关键字段名称,因为我需要在使用现有数据库时指定确切的列名。

另外,我建议使用NHibernate 3.2从源代码重建Fluent NHibernate,以确保一切都到位。

答案 1 :(得分:1)

文章How to upgrade your apps to NHibernate 3.2 with Fluent NHibernate 1.2可能会有所帮助。我自己用它来升级项目,但它确实有效。