NHibernate: возможно ли использовать сохраненный процесс при обновлении / удалении / вставке класса, отображаемого в представлении? - PullRequest
1 голос
/ 06 октября 2010

Вот преамбула:

  • У меня есть SQL View и сопоставленный класс NHibernate C #

  • Мне разрешено изменять только данные SQL Viewчерез некоторые хранимые процедуры (Вставить / Обновить / Удалить)

Как обозначить такую ​​логику в файле отображения?Это возможно только с определенным отображением или мне нужен дополнительный код?

Ответы [ 2 ]

2 голосов
/ 06 октября 2010

Это описано в 19.3.Пользовательский SQL для создания, обновления и удаления

Пример:

<class name="Person" table="PersonView">
    <id name="id">
        <generator class="guid"/>
    </id>
    <property name="name" not-null="true"/>
    <sql-insert>exec createPerson ?, ?</sql-insert>
    <sql-delete>exec deletePerson ?</sql-delete>
    <sql-update>exec updatePerson ?, ?</sql-update>
</class>
2 голосов
/ 06 октября 2010

Вы можете вызывать хранимые процедуры SQL, используя Именованные запросы NHibernate :

< ?xml version="1.0" encoding="utf-8"?>
<hibernate -mapping xmlns="urn:nhibernate-mapping-2.2">
    <sql -query name="FindPlayerByLastDrugTest">
        <query -param name="LastDrugTestDate" />

            <return class="Player">
                <return -property column="PlayerID" name="PlayerID" />
                <return -property column="PlayerName" name="Name" />
                <return -property column="TeamID" name="Team" />
                <return -property column="LastDrugTestID" name="LastDrugTestResult" />
            </return>

        exec spSelectPlayersByLastDrugTestDate @LastDrugTest=:LastDrugTestDate
    </sql>
</hibernate>

/*** Back on C# ***/
IQuery query = session.GetNamedQuery("FindPlayerByLastDrugTest")
                      .SetDateTime(new DateTime(2003, 1, 1));

// Return a collection
IList list = query.List();

// Return a single entity
var result = query.UniqueResult();

Подробнее здесь .

...