我们最近将 Automapped FNH/NH 项目升级到 NH 3.2,但遇到了很多问题。

我们的对象模型中有很多属性只有一个“getter”,例如

    public virtual float Polydispersity
    {
        get { return MeasurementRun.PolyDispersity; }
    }

这曾经工作得很好,但现在我们得到“找不到属性的 setter ”错误。

这很难找到,因为出于某种原因,自动映射无法创建数据库表,导致在保存到数据库时出现“无持久性”错误 - 有关详细信息,请参阅 this

是不是因为林府现在建在NH里了?我知道私有(private)二传手不再起作用,这似乎是一个类似的问题。

我们曾经使用 CaSTLe,我真的很喜欢 NH 现在不需要所有其他 DLL,但如果它破坏了我们对象模型的很大一部分,则不需要。

关于如何解决这个问题的任何建议?

堆栈跟踪

最佳答案

您不应映射只读属性。

- 解决方案 1

    var map = AutoMap.AssemblyOf<Dummy>()
         .OverrideAll(x => x.IgnoreProperties(property => !property.CanWrite));

- 解决方案 2
internal class MyMappingConfiguration : DefaultAutomappingConfiguration
{
        public override bool ShouldMap(Member member)
        {
            return base.ShouldMap(member) && member.CanWrite;
        }
}

...然后使用您的 conf :
var map = AutoMap.AssemblyOf<Dummy>(new MyMappingConfiguration());

编辑:添加了 Tom Bushell 的建议

关于NHibernate 3.2 - 现在是否所有属性都需要 "set"方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8101316/

10-15 21:21