Session.Get和Session.Load命令忽略过滤器

时间:2012-11-08 14:30:16

标签: nhibernate nhibernate-mapping

我正在使用带过滤器的映射。

但是当我尝试保留我的对象时,它首先想要获取快照(因为我的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);

这是filter-def映射:

<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会忽略过滤器。

有没有其他选择,因为我需要这种语言可变。

1 个答案:

答案 0 :(得分:1)

好的,我做的是以下内容:我没有使用SaveOrPersist,但是在新的时候保存,当我有旧的时候保留。这没有执行额外的获取。