フィルター付きのマッピングを使用しています。
しかし、オブジェクトを永続化しようとすると、最初にスナップショットを取得しようとします (ID が文字列であるため)。
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="DomainLayer.General" assembly="DomainLayer">
<class name="Fund" table="OPENA_BriefW" lazy="false">
<id name="Id" column="`BRWNUMMER`" type="string" >
</id>
<property name="Name" column="`BRWNAAM`" type="string" />
<property name="Contact" column="`BRWNAAM2`" type="string" />
<property name="Address" column="`BRWADRES`" type="string" />
<property name="City" column="`BRWSTAD`" type="string" />
<property name="Zip" column="`BRWPOST`" type="string" />
<property name="Phone" column="`BRWTELEFOON`" type="string" />
<property name="Fax" column="`BRWTELEFAX`" type="string" />
<property name="Iban" column="`brw_iban`" type="string" />
<property name="BankAccount" column="`BRWBANKNU`" type="string" />
<property name="Swift" column="`brw_swift`" type="string" />
<property name="ReceiveOffice" column="`BRWONTVKANT`" type="int" />
<property name="RegionDirection" column="`BRWGEWESTDIR`" type="int" />
<many-to-one name="Country" class="DomainLayer.General.CodeDescription" fetch="join" not-found="ignore">
<formula>'ALG'</formula>
<formula>'0'</formula>
<formula>'WG030'</formula>
<column name="`BRWLAND`" />
<formula>:LanguageFilter.Id</formula>
</many-to-one>
</class>
</hibernate-mapping>
ご覧のとおり、フィルタ :LanguageFilter.Id が問題の原因です。通常の .List() を実行すると、問題は発生しません。
しかし、私が固執するとき、最初にファンドがすでに存在するかどうかを確認したいと考えています。.Get (ID 付き) を実行する。
次に、クエリで :LangaugeFilter.Id をセッションで設定した有効な値に置き換えないため、スナップショットを取得できないというエラーが表示されます。
次のように、セッションでフィルターを有効にします。
session.EnableFilter("LanguageFilter").SetParameter("Id", 1);
フィルター定義のマッピングは次のとおりです。
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<filter-def name='LanguageFilter' >
<filter-param name='Id' type='System.Int32' />
</filter-def>
</hibernate-mapping>
この投稿 (コメント 4) http://ayende.com/blog/3993/nhibernate-filtersによると、session.Get と Load はフィルターを無視します。
その言語を可変にする必要があるため、代替手段はありますか。