NHibernate 3.2-是否所有酒店现在都需要;“设置”;方法?

NHibernate 3.2-是否所有酒店现在都需要;“设置”;方法?,nhibernate,fluent-nhibernate,nhibernate-mapping,fluent-nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,Fluent Nhibernate Mapping,我们最近将我们的自动映射FNH/NH项目升级为NH3.2,并且遇到了很多问题 我们的对象模型中有很多属性只有一个“getter”,例如 这过去工作正常,但现在我们得到“找不到属性的setter”错误 这很难找到,因为出于某种原因,自动映射无法自动创建DB表,导致保存到DB时出现“无持久器”错误-有关详细信息,请参阅 这是因为林府现在建在新罕布什尔州吗?我知道私人二传不再工作,这似乎是一个类似的问题 我们以前使用Castle,我真的很喜欢NH现在不需要所有其他DLL,但如果它破坏了我们对象模型的很

我们最近将我们的自动映射FNH/NH项目升级为NH3.2,并且遇到了很多问题

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

这过去工作正常,但现在我们得到“找不到属性的setter”错误

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

这是因为林府现在建在新罕布什尔州吗?我知道私人二传不再工作,这似乎是一个类似的问题

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

有没有关于如何解决这个问题的建议

堆栈跟踪

FluentNHibernate.Cfg.FluentConfigurationException:无效或 创建SessionFactory时使用了不完整的配置。 有关详细信息,请检查潜在原因集合和InnerException

--->NHibernate.PropertyNotFoundException:找不到setter 对于类中的“多分散性”属性 “BI_Overorddlsappore.OfeDlsMeasurement”位于 NHibernate.Properties.BasicPropertyAccessor.GetSetter(类型, NHibernate.Mapping.Property.GetSetter(类型 clazz)在 NHibernate.Tuple.Entity.PocoEntityTuplizer.BuildPropertySetter(属性 mappedProperty,PersistentClass mappedEntity)位于 NHibernate.Tuple.Entity.AbstractEntityTuplizer..ctor(EntityMetamodel entityMetamodel,PersistentClass mappingInfo)位于 NHibernate.Tuple.Entity.PocoEntityTuplizer..ctor(EntityMetamodel entityMetamodel,PersistentClass MapPedenty)位于 NHibernate.Tuple.Entity.EntityEntityModeToUpplizerMapping..ctor(PersistentClass MapPedenty,EntityMetamodel em)位于 NHibernate.Tuple.Entity.EntityMetamodel..ctor(PersistentClass persistentClass,ISessionFactoryImplementor sessionFactory)位于 NHibernate.Persister.Entity.AbstractEntityPersister..ctor(PersistentClass persistentClass、ICACHE并发策略缓存、, ISessionFactoryImplementor工厂)位于 NHibernate.Persister.Entity.JoinedSubassentitypersister..ctor(PersistentClass persistentClass、ICACHE并发策略缓存、, ISessionFactoryImplementor工厂,IMapping映射)位于 NHibernate.Persister.PersisterFactory.CreateClassPersister(PersistentClass 模型,ICAcheConcurrentyStrategy缓存,ISessionFactoryImplementor 工厂,IMAP(cfg)位于 NHibernate.Impl.SessionFactoryImpl..ctor(配置cfg,IMapping 映射、设置、事件侦听器(侦听器) NHibernate.Cfg.Configuration.BuildSessionFactory()位于 FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory()--- 内部异常堆栈跟踪的结束---at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory()位于 BI_OverlordPackageCore.OfeDatabase.CreateSqliteSessionFactory()位于 C:\Bicw\u Dev\Bic.Net\Private Projects\NHibernate\FNH 1.3映射 Bug\OfeDatabase.cs:第192行 中的BI_OverlordPackageCore.OfeDatabase.GetMainSession() C:\Bicw\u Dev\Bic.Net\Private Projects\NHibernate\FNH 1.3映射 Bug\OfeDatabase.cs:第147行 BI_OverlordPackageCore.OfeDatabase.Initialize(程序集[]程序集) 在C:\Bicw\u Dev\Bic.Net\Private Projects\NHibernate\FNH 1.3映射中 Bug\OfeDatabase.cs:第305行 FNH_1._3_映射_Bug.Form1.按钮1_单击(对象发送者,事件参数e) 在C:\Bicw\u Dev\Bic.Net\Private Projects\NHibernate\FNH 1.3映射中 Bug\Form1.cs:第23行 System.Windows.Forms.Control.OnClick(EventArgs e)位于 System.Windows.Forms.Button.OnClick(EventArgs e)位于 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs-mevent)位于 System.Windows.Forms.Control.WmMouseUp(Message&m,MouseButtons 按钮,Int32单击)在 System.Windows.Forms.Control.WndProc(Message&m)位于 System.Windows.Forms.ButtonBase.WndProc(Message&m)位于 System.Windows.Forms.Button.WndProc(Message&m)位于 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&m) 在System.Windows.Forms.Control.ControlNativeWindow.WndProc(消息& m) 在System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd,Int32 msg、IntPtr wparam、IntPtr lparam)


不应映射只读属性。

-解决方案1

    var map = AutoMap.AssemblyOf<Dummy>()
         .OverrideAll(x => x.IgnoreProperties(property => !property.CanWrite));
。。。然后使用您的配置文件:

var map = AutoMap.AssemblyOf<Dummy>(new MyMappingConfiguration());
var-map=AutoMap.AssemblyOf(新的MyMappingConfiguration());

编辑:添加了Tom Bushell的建议

我正在使用NHibernate 3.2.0.GA,它具有许多只获取属性,并且运行良好。请发布完整的异常消息和堆栈跟踪。@cremor-我添加了堆栈跟踪标记-我可能可以将其作为一种解决方法,但我发现在自动映射调用中将其作为覆盖更为方便,即..OverrideAll(map=>map.IgnoreProperties(prop=>!prop.CanWrite)。这消除了示例项目中的异常,但在实际项目中映射仍会默默失败。
internal class MyMappingConfiguration : DefaultAutomappingConfiguration
{
        public override bool ShouldMap(Member member)
        {
            return base.ShouldMap(member) && member.CanWrite;
        }
}
var map = AutoMap.AssemblyOf<Dummy>(new MyMappingConfiguration());