Как отобразить функцию sql в виде именованного запроса с помощью динамического отображения Nhibernate? - PullRequest
1 голос
/ 27 октября 2011

Я заменил все мои файлы сопоставления NHibernate xml на loquacious mappings (сопоставление по коду).Единственное, что я не могу понять, это то, можно ли определить этот именованный запрос с помощью 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 Ответ

1 голос
/ 27 октября 2011

Вы по-прежнему можете смешивать свои сопоставления, то есть использовать всю новую сочность сопоставления по коду и по-прежнему иметь некоторые из названных файлов сопоставления 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();

Я написал сообщение в блоге по этому поводу.

...