我已经通过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>
有没有人知道它是否可能,以及如何做到这一点或指向正确的方向?
提前致谢, 此致,特德
答案 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。