NHibernate использовать хранимую процедуру или сопоставление - PullRequest
3 голосов
/ 16 июня 2011

У меня есть отображение в NHibernate, которое работает так:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="BizEntities"
    namespace="BizEntities"
    default-lazy="false">
  <class name="SubscriberQueueItem" table="SubscriberQueueItem">
    <id name="SubscriberQueueItemId" column="Id" type="int" unsaved-value="0">
      <generator class="identity" />
    </id>
    <property name="DateCreated" column="DateCreated"  type="DateTime" />
    <property name="CMIId" column="CMIId" type="int" />
    <property name="DateProcessed" column="DateProcessed"  type="DateTime" />
    <property name="EventStatus" column="EventStatusId" type="QueueStatusTypeValues, BizEntities" />
    <many-to-one  name="Subscription"  class="Subscription" column="SubscriptionId" />
    <property name="ErrorDescription" column="ErrorDescription" type="string" />

  </class>
</hibernate-mapping>

и он извлекается с помощью простых запросов к таблице.

Можно ли также сопоставить этот класс хранимой процедуре? У меня есть написанная процедура, которая разбрасывает определенный подраздел данных, который трудно записать в запрос NHibernate, но легко написать как хранимую процедуру.

Могу ли я просто добавить отображение хранимой процедуры с ответом здесь и получить объект с прямым отображением или сохраненным процессом на основе моего типа запроса NHibernate, или добавление отображения хранимой процедуры в мою hbm означает, что я можно получить только на основе этой хранимой процедуры?

Ответы [ 2 ]

6 голосов
/ 16 июня 2011

Хранимые процедуры прекрасно работают в NHibernate, я использую их без проблем:)

Вам нужно добавить «именованный запрос» в ваше отображение hibernate, например:

<sql-query name="spMyProcedure">
    <!-- return type must be an NHibernate mapped entity -->
    <return alias="SubscriberQueueItem" type="BizEntities.SubscriberQueueItem, BizEntities" />

    exec spMyProcedure @Param1=:Param1, @Param2=:Param2
</sql-query>

Если тип возвращаемого значения вашей хранимой процедуры не совпадает с уже сопоставленной сущностью, вам нужно создать новую.

Чтобы вызвать sp, вам нужно добавить следующий код:

var query = session.GetNamedQuery("spMyProcedure");

query.SetParameter("Param1", "hello");
query.SetParameter("Param2", "byebye");

SubscriberQueueItem result = query.UniqueResult<SubscriberQueueItem>();
0 голосов
/ 16 июня 2011

Я не уверен, чего вы хотите достичь, но я думаю, что эти две вещи взаимоисключающие.

Вы можете посмотреть сообщения в ayende: http://ayende.com/blog/1728/should-you-use-nhibernate-with-stored-procedure

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...