如何使用Nhibernate的loquacious映射将sql函数映射为命名查询?

时间:2011-10-27 10:31:15

标签: nhibernate named-query mapping-by-code

我已经通过loquacious映射(按代码映射)替换了所有我的NHibernate xml映射文件。我唯一想知道的是,是否可以使用loquacious映射定义这个命名查询:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping namespace="Domain" assembly="Domain" xmlns="urn:nhibernate-mapping-2.2"> 
  <sql-query name="MyFunction">
    <query-param name="Inputparam1" type="Int32"/>
    <query-param name="Inputparam2" type="Int32"/>
    <return-scalar column="ResultParam" type="Int32"/>
    <![CDATA[ select MyFunction(:Inputparam1,:Inputparam2) as ResultParam ]]>
  </sql-query>
</hibernate-mapping>

有没有人知道它是否可能,以及如何做到这一点或指向正确的方向?

提前致谢, 此致,特德

1 个答案:

答案 0 :(得分:1)

你仍然可以混合你的映射,即使用代码映射的所有新的多汁性,并且仍然有一些HBM命名的映射文件。

解决方案非常简单,首先需要将web.config(或外部nhibernate配置文件)定义为: -

<configSections>  
  <section name="hibernate-configuration"  
   type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"
     requirePermission="false" />  
</configSections>  

<hibernate-configuration  
   xmlns="urn:nhibernate-configuration-2.2">  
  <session-factory>  
    <property name="dialect">  
      NHibernate.Dialect.MySQL5Dialect  
    </property>  
    <mapping assembly="Domain.Model" />  
  </session-factory>  
</hibernate-configuration> 

然后相应地配置NHibernate: -

var mapper = new ModelMapper();
mapper.AddMappings(typeof(CmsMeta).Assembly.GetTypes());
//Notice the .Configure, this is the magic that allows you to
//  use the mixed mappings
var configure = new Configuration().Configure();
configure.DataBaseIntegration(x =>
{
  x.Dialect<MySQL5Dialect>();
  x.ConnectionStringName = "db";
}).CurrentSessionContext<WebSessionContext>();

configure.AddDeserializedMapping(mapping, "Domain");
SessionFactory = configure.BuildSessionFactory();

关于此,我写了blog post