NHibernate - Заполняет одно свойство из хранимой процедуры. - PullRequest
3 голосов
/ 10 ноября 2008

В настоящее время есть следующий файл сопоставления:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
    namespace="NHibernateHelpers"
    assembly="App_Code.NHibernateHelpers">
  <class name="NHibernateHelpers.Fixture, App_Code" table="Fixture_Lists">
    <id name="Id" column="UniqRefNo">
      <generator class="guid" />
    </id>
    <property name="Date" column="FixDate"/>
    <property name="HomeTeamId" column="HomeId"/>
    <property name="HomeTeamName" column="Home_Team"/>
    <property name="AwayTeamId" column="AwayId"/>
    <property name="AwayTeamName" column="Away_Team"/>
    <property name="Kickoff" column="Kickoff"/>
    <bag name="Goals">
      <key column="FixID" />
      <one-to-many class="NHibernateHelpers.Goal, App_Code"/>
    </bag>
    <bag name="Bookings">
      <key column="FixID" />
      <one-to-many class="NHibernateHelpers.Booking, App_Code"/>
    </bag>
    <many-to-one name="HomeTeam" class="NHibernateHelpers.Team" column="HomeId" />
    <many-to-one name="AwayTeam" class="NHibernateHelpers.Team" column="AwayId" />
    <many-to-one name="Division" class="NHibernateHelpers.Division" column="Div_Comp" />
    <property name="HomeFullTimeScoreCode" column="Home_FT_Score"/>
    <property name="AwayFullTimeScoreCode" column="Away_FT_Score"/>
  </class>
</hibernate-mapping>

Который хорошо отображается в унаследованной базе данных, которую я унаследовал, но я хотел бы добавить свойство с именем «MatchTime», которое содержит выходные данные хранимой процедуры:

EXEC GetMatchTime @FixtureId = :Id

где: Id - это идентификатор текущего объекта Fixture.

Возможно ли это в файле сопоставления?

Ответы [ 3 ]

1 голос
/ 11 ноября 2008

Немного глупо - но как насчет того, чтобы не преобразовывать sp в функции, а создавать новые функции и использовать их в качестве оберток вокруг существующего sp? Вы можете добавить Id к функции и передать его хранимой процедуре, получить результаты выполнения sp и передать их обратно.

http://sqlblog.com/blogs/denis_gobo/archive/2008/05/08/6703.aspx

0 голосов
/ 10 ноября 2008

@ Уотсон

Содержимое формулы добавляется в качестве подзапроса NHibernate, поэтому полученный SQL-код выглядит примерно так:

SELECT FieldA, FieldB, FieldC, ( EXEC GetMatchTime Id ) FROM Fixture_Lists

К сожалению, из-за невозможности использования хранимых процедур в качестве подзапроса.

Я мог бы преобразовать хранимую процедуру в функцию, но их много, и это потенциально может нарушить унаследованный код.

0 голосов
/ 10 ноября 2008

Возможно, вам придется немного подправить параметр, но он должен работать (Id совпадает с именем Fixture.Id):

<property name='MatchTime' formula='(EXEC GetMatchTime Id)'/>

http://ayende.com/Blog/archive/2006/12/26/LocalizingNHibernateContextualParameters.aspx

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