Как я могу использовать хранимую процедуру из NHibernate, но в то же время сохранять базу данных независимой от решения и кодовую базу чистой от операторов switch с регистром для каждого диалекта?
Я ожидаю создать именованный запрос для реализации базы данных, содержащий содержимое реализации SQL для этой базы данных. Моя дилемма в том, как лучше всего условно вызвать правильный именованный запрос. В частности, в настоящее время мы проводим тестирование на диалектах MySQL и MS SQL Server 2008.
Кто-нибудь знает, как создать условную именованную карту запросов по диалекту? (Это позволит хранить различные реализации хранимых процедур в одном месте для упрощения обслуживания.)
То, что я собираюсь сделать, - вот что я собираюсь сделать, но я бы предпочел избежать как накладных расходов проверки времени выполнения, так и написания любого кода, который должен проверять текущую версию базы данных для правильной работы ...
if (nhSession.GetSessionImplementation().Factory.Dialect == NHibernate.Dialect.MySQL5Dialect) {
// grab the MySQL named query here
} else {
// grab the SQL Server named query here
}
Есть ли способ сделать что-то подобное вместо этого? (ниже желаемое псевдокодирование ...)
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<dialect-filter dialect="mysql">
<sql-query name="spForMySQL" callable="true">
<query-param name="mySqlP1" type="int" />
<return alias="OutType" class="Domain.ResultType, Domain">
<return class="ResultType">
<return-property column="col1" name="Id" />
<return-property column="col2" name="Name" />
</return>
</return>
call spName(:mySqlP1)
</sql-query>
</dialect-filter>
<dialect-filter dialect="SQLServer">
<sql-query name="spForSQLServer" callable="true">
<query-param name="sqlServerP1" type="int" />
<return alias="OutType" class="Domain.ResultType, Domain">
<return class="ResultType">
<return-property column="col1" name="Id" />
<return-property column="col2" name="Name" />
</return>
</return>
exec spForSQLServer @sqlServerP1= :sqlServerP1
</sql-query>
</dialect-filter>
</hibernate-mapping>