使用 NHibernate 将本机 sql 映射到实体

Mapping native sql to Entity with NHibernate

是否可以使用 NHibernate 将原始 sql 映射到实体?

喜欢以下内容:

C#实体:

public virtual IList<Result> MyResult { get; set; }

Hbm.xml:

<bag name="MyResult">
    <my-custom-sql type="Result">
        SELECT * FROM ResultTable where MyComplexCondition = true
    </my-custom-sql>
</bag>

结果有它自己的 hbm.xml。是否可以实现我想要的效果?

有一个功能,叫做<subselect>。在这里查看更多内容

How to map an NHibernate entity to a query

这可以应用于 <class> 以及 <bag>。这可能是如何在 MyEntity 的包上使用它的方式,其中包含 Languages

<bag name="Languages" lazy="true" batch-size="25" 
     mutable="false" >
  <subselect>
    SELECT MyEntity_ID, Language_ID, IsNative FROM Languages
  </subselect>
  <key column="MyEntity_ID" />
  <composite-element class="Language">
    <parent name="MyEntity"/>
    <many-to-one not-null="true" name="Language" class="Language" column="Language_ID" />
    <property not-null="true" name="IsNative" column="IsNative"/>
  </composite-element>
</bag>

这当然应该用于只读(不可变)解决方案