4

私たちは最近Automapped FNH/NHプロジェクトをNH 3.2にアップグレードし、多くの問題に取り組んでいます。NHibernate 3.2 - すべてのプロパティに "set"メソッドが必要ですか?

オブジェクトモデルには「ゲッター」しかない多くのプロパティがあります。

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

これは正常に動作するために使用されるが、今はエラー「プロパティのセッターが見つかりませんでした」を得ます。

何らかの理由でオートメーションが自動的にDBテーブルを作成できなかったため、DBに保存するときに「維持不能」エラーが発生しました。詳細はthisを参照してください。

これはLinFuがNHに組み込まれているためですか?私はプライベートセッターがもう動作しないことを知っています、そして、これは同様の問題であるようです。

私は城を使用していましたが、私は実際にNHが他のDLLをすべて必要としないことを願っていますが、私たちのオブジェクトモデルの大きな部分を壊してしまうわけではありません。

これを回避する方法についてのご意見はありますか?

スタックトレース

FluentNHibernate.Cfg.FluentConfigurationException:SessionFactoryの作成中に無効または 不完全な構成が使用されました。 PotentialReasonsコレクションをチェックし、詳細についてはInnerExceptionを確認してください。

---> NHibernate.PropertyNotFoundException:プロパティのセッター クラス の '多分散性' を見つけることができませんでした 'BI_OverlordDlsAppCore.OfeDlsMeasurement' NHibernate.Properties.BasicPropertyAccessor.GetSetter(タイプtype、 文字列プロパティ名)でNHibernateので NHibernate.Tuple.Entity.AbstractEntityTuplizer..ctor(entityMetamodel entityMetamodel、PersistentClass mappingInfo)で NHibernate.Tuple.Entity.PocoEntityTuplizer.BuildPropertySetter(プロパティ mappedProperty、PersistentClass mappedEntity)で.Mapping.Property.GetSetter(タイプ clazz) at NHibernate.Tuple.Entity.Po NHibernate.Tuple.Entity.EntityMetamodel..ctor(PersistentClass persistentClass、ISessionFactoryImplementorで NHibernate.Tuple.Entity.EntityEntityModeToTuplizerMapping..ctor(PersistentClass mappedEntity、EntityMetamodel EM)でcoEntityTuplizer..ctor(EntityMetamodel entityMetamodel、PersistentClass mappedEntity) NHibernate.Persister.Entity.JoinedSubclassEntityPersister..ctor(PersistentClass persistentClassで NHibernate.Persister.Entity.AbstractEntityPersister..ctor(PersistentClass persistentClass、ICacheConcurrencyStrategyキャッシュ、 ISessionFactoryImplementor工場)でのSessionFactory)、ICacheConcurrencyStrategyキャッシュ、 ISessionFactoryImplementまたは工場は、 NHibernate.Impl.SessionFactoryImpl..ctor(設定CFGで NHibernate.Persister.PersisterFactory.CreateClassPersister(PersistentClass モデル、ICacheConcurrencyStrategyキャッシュ、ISessionFactoryImplementor 工場、IMappingのCFG)、IMapping マッピングでマッピング)をIMapping、設定値を設定します、EventListenersリスナー)。 NHibernate.Cfg.Configuration。 Cで FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory BI_OverlordPackageCore.OfeDatabase.CreateSqliteSessionFactory(AT FluentNHibernate.Cfg.FluentConfiguration.BuildSessionFactory()で内部例外スタックトレースの()--- エンド---)でBuildSessionFactory() :Bicw_Dev \ Bic.Net \ Private Projects \ NHibernate \ FNH 1.3マッピング Bug \ OfeDatabase.cs: の行192、BI_OverlordPackageCore.OfeDatabase.GetMainSession()、 C:\ Bicw_Dev \ Bic.Net \ Private Projects \ NHibernate \ FNH 1.3マッピング Bug \ OfeDatabase.cs:行147: BI_OverlordPackageCore.OfeDatabase.Initialize(アセンブリ[]アセンブリ) C:\ Bicw_Dev \ Bic.Net \ Private Projects \ NHibernate \ FNH 1.3マッピング バグの\ OfeDatabase.cs:\ Bicw_Dev \ Bic.Net民間プロジェクト\ \ NHibernateは\ FNH 1.3マッピング バグ\ Form1.csを: FNH_1._3_Mapping_Bug.Form1.button1_Click(オブジェクト送信者、EventArgsの電子)Cで でライン305 :行23 でSystem.Windows.Forms.Button.OnMouseUp(MouseEventArgsのmevent)で System.Windows.Forms.Button.OnClick(のEventArgs e)に System.Windows.Forms.Control.OnClick(のEventArgs電子)で System.Windows.Forms.ButtonBase.WndProc(メッセージで System.Windows.Forms.Control.WndProc(メッセージ& M)でSystem.Windows.Forms.Control.WmMouseUp(メッセージ& M、MouseButtons ボタンのInt32はクリック) &m) でSystem.Windows.Forms.Control.ControlNativeWindow.WndProcで System.Windows.Forms.Control.ControlNativeWindow.OnMessage(メッセージ& M) でSystem.Windows.Forms.Button.WndProc(メッセージ& M)(メッセージ& M)System.Windows.Forms.NativeWindow.Callbackで(のIntPtrのhWnd、のInt32 MSG、のIntPtr WPARAM、LPARAMのIntPtr)

+1

多くの取得専用プロパティを持つNHibernate 3.2.0.GAを使用していて、うまくいきます。完全な例外メッセージとスタックトレースを投稿してください。 – cremor

+0

@cremor - スタックトレースを追加しました –

答えて

7

あなたは読み取り専用プロパティをマッピングするべきではありません。

- 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()); 

エディt:Tom Bushellの提案を追加しました

+1

ありがとうございます - これを回避策として使用できるかもしれませんが、私のAutoMap呼び出しのオーバーライドとしてこれを行う方が便利だとわかりました.OverrideAll(map => map.IgnoreProperties prop =>!prop.CanWrite)これにより、私のサンプルプロジェクトでは例外がなくなりましたが、実際のプロジェクトではマッピングが黙って失敗します。 –

+0

解決策1は素晴らしいです!+1 – Joel

関連する問題