Tom*_*ell 4 nhibernate nhibernate-mapping fluent-nhibernate fluent-nhibernate-mapping
我们最近将Automapped FNH/NH项目升级到NH 3.2,并遇到了很多问题.
我们的对象模型中有很多属性,只有"getter",例如
public virtual float Polydispersity
{
get { return MeasurementRun.PolyDispersity; }
}
Run Code Online (Sandbox Code Playgroud)
这曾经工作正常,但现在我们得到"找不到属性的setter"错误.
这很难找到,因为由于某种原因,自动化无法创建数据库表,导致在保存到数据库时出现"无持久性"错误 - 请参阅此处了解详细信息.
这是因为LinFu现在已经建成了NH?我知道私人制定者不再有效,这似乎也是一个类似的问题.
我们曾经使用Castle,我真的很喜欢NH现在不需要所有其他DLL,但如果它破坏了我们对象模型的很大一部分,那就不行了.
有关如何绕过这个的任何建议?
堆栈跟踪
FluentNHibernate.Cfg.FluentConfigurationException:创建SessionFactory时使用了无效或不完整的配置.检查PotentialReasons集合,以及InnerException以获取更多详细信息.
---> NHibernate.PropertyNotFoundException:在NHibernate.Mapping.Property.GetSetter(NHibernate.Mapping.Property.GetSetter)的NHibernate.Properties.BasicPropertyAccessor.GetSetter(Type type,String propertyName)的类'BI_OverlordDlsAppCore.OfeDlsMeasurement'中找不到属性'Polydispersity'的setter clazz所)在NHibernate.Tuple.Entity.PocoEntityTuplizer.BuildPropertySetter(物业mappedProperty,对PersistentClass mappedEntity)在NHibernate.Tuple.Entity.AbstractEntityTuplizer..ctor(entityMetamodel entityMetamodel,对PersistentClass mappingInfo)在NHibernate.Tuple.Entity.PocoEntityTuplizer..ctor(entityMetamodel在NHibernate.Tuple.EntityMetamode.EntityEntityModeToTuplizerMapping..ctor(PersistentClass mappedEntity,EntityMetamodel em)的NHibernate.Tuple.EntityMetamodel..ctor(PersistentClass persistentClass,ISessionFactoryImplementor sessionFactory)NHibernate.Persister.Entity.AbstractEntityPersister中的entityMetamodel,PersistentClass mappedEntity. .ctor(PersistentClass persistentClass,ICacheConcurrencyStr ategy缓存,ISessionFactoryImplementor工厂)在NHibernate.Persister.Entity.JoinedSubclassEntityPersister..ctor(对PersistentClass对PersistentClass,ICacheConcurrencyStrategy缓存,ISessionFactoryImplementor工厂,IMapping映射)在NHibernate.Persister.PersisterFactory.CreateClassPersister(模型对PersistentClass,ICacheConcurrencyStrategy缓存,ISessionFactoryImplementor工厂,IMapping CFG at NHibernate.Impl.SessionFactoryImpl..ctor(配置cfg,IMapping映射,设置设置,EventListeners监听器)at NHibernate.Cfg.Configuration.BuildSessionFactory()at FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory()---内部异常结束堆栈跟踪---位于FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory()位于C:\ Bicw_Dev\Bic.Net\Private Projects\NHibernate\FNH中的BI_OverlordPackageCore.OfeDatabase.CreateSqliteSessionFactory()中.映射错误\ OfeDatabase.cs:第192行C:\ Bicw_Dev\Bic.Net\P中的BI_OverlordPackageCore.OfeDatabase.GetMainSession()rivate Projects\NHibernate\FNH 1.3 Mapping Bug\OfeDatabase.cs:位于C:\ Bicw_Dev\Bic.Net\Private Projects\NHibernate\FNH 1.3 Mapping Bug\OfeDatabase中BI_OverlordPackageCore.OfeDatabase.Initialize(Assembly []程序集)的第147行. CS:\ Bicw_Dev\Bic.Net \私营项目\ NHibernate的\ FNH 1.3映射错误\ Form1.cs中:在System.Windows线23在FNH_1._3_Mapping_Bug.Form1.button1_Click(对象发件人,EventArgs e)在C线305. System.Windows.Forms.OnClick(EventArgs e)位于System.Windows.Forms.OnMouseUp(MouseEventArgs mevent)的System.Windows.Forms.Button.OnClick(EventArgs e),位于System.Windows.Forms.Control.WmMouseUp(Message&m) ,MouseButtons按钮,Int32单击)在System.Windows.Forms.ButtonBase.WndProc(Message&m)的System.Windows.Forms.Control.WndProc(Message&m)处于System.Windows.Forms.Button.WndProc(Message&m)at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(消息&m)上System.Windows.Forms.Control.ControlNativeWindow.WndProc(消息&m)上System.Windows.Forms.NativeWindow.Cal lback(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam)
您不应映射只读属性.
- 解决方案1
var map = AutoMap.AssemblyOf<Dummy>()
.OverrideAll(x => x.IgnoreProperties(property => !property.CanWrite));
Run Code Online (Sandbox Code Playgroud)
- 解决方案2
internal class MyMappingConfiguration : DefaultAutomappingConfiguration
{
public override bool ShouldMap(Member member)
{
return base.ShouldMap(member) && member.CanWrite;
}
}
Run Code Online (Sandbox Code Playgroud)
...然后使用你的conf:
var map = AutoMap.AssemblyOf<Dummy>(new MyMappingConfiguration());
Run Code Online (Sandbox Code Playgroud)
编辑:添加了Tom Bushell的建议
| 归档时间: |
|
| 查看次数: |
1481 次 |
| 最近记录: |