<Sql-insert> для подклассов - PullRequest
       7

<Sql-insert> для подклассов

1 голос
/ 10 ноября 2009

У меня объект отображается следующим образом:

<class name="A" table="TableA">
    <id name="ID" column="AId" type="Int32" unsaved-value="0">
        <generator class="native" />
    </id>
    <discriminator column="Type" type="Int32" />
    <property name="Description" />
</class>

<subclass name="B" discriminator-value="0" extends="A">
    <property name="B_specific_properties />
</subclass>

<subclass name="C" discriminator-value="1" extends="A">
    <property name="C_specific_properties />
</subclass>

Я планирую использовать хранимую процедуру для вставки, и в настоящее время и B, и C используют одну и ту же хранимую процедуру для вставки в таблицу. Мой вопрос с объектами, сопоставленными, как указано выше, относится ли sql-insert к классу A? Если это так, ожидает ли он сохранения () объекта A? Как я могу заставить его распознавать дополнительные свойства B и C при сохранении?

OR

Является ли использование одной хранимой процедуры для сохранения для двух подклассов невозможной задачей, хотя они принадлежат одной и той же таблице?

Большое спасибо за любой вклад!

1 Ответ

0 голосов
/ 11 ноября 2009

Я покажу вам, как я это сделал

<class name="CompanyCharacteristic" table="firma_cecha" abstract="true" discriminator-value="not null">
    <id name="Id" column="id_firma_cecha">
        <generator class="native" />
    </id>
    <discriminator column="typ_cechy"/>
    <property name="FriendlyTypeName" column="typ_cechy" insert="false" update="false"/>

    <property name="All" column="cecha_all" access="nosetter.camelcase"/>

    <!-- Auditing data -->
    <property name="UserInserted" access="nosetter.camelcase" column="user_insert" insert="true" update="false"/>
    <property name="DateInserted" column="data_insert" generated="insert" insert="false" update="false"/>

    <subclass discriminator-value="Akceptacja kart płatniczych" name="CreditCardAcceptanceCharacteristic">
        <property name="DoesIt" column="cecha_dec_1" not-null="true" type="DataAccess.NHibernate.Infrastructure.UserTypes.EnumValueInfoUserType`1[[Domain.Characteristics.YesNoNumericEnum, Domain]], DataAccess"/>
        <sql-insert>
            DECLARE @returned decimal(20,0)
            exec sp_FirmaCecha_Add
            @TypCechy = 'Akceptacja kart płatniczych',
            @CechaAll = ?,
            @UserInsertZrodlo = ?,
            @CechaDec1 = ?,
            @IdFirmaCecha = @returned OUTPUT
            SELECT @returned
        </sql-insert>
        <sql-update>
            exec sp_FirmaCecha_Update
            @TypCechy = 'Akceptacja kart płatniczych',
            @UserUpdateZrodlo = ?,
            @CechaDec1 = ?,
            @IdFirmaCecha = ?
        </sql-update>
        <sql-delete>
            exec sp_FirmaCecha_Delete ?
        </sql-delete>
    </subclass>

    <sql-insert>
        raiserror ('CompanyInfoCharacteristic nie moze byc dodwana za pomocą NHibernate',11,1)
    </sql-insert>
    <sql-update>
        raiserror ('CompanyInfoCharacteristic nie moze byc aktualizowana za pomocą NHibernate.',11,1)
    </sql-update>
    <sql-delete>
        raiserror ('CompanyInfoCharacteristic nie moze byc kasowana za pomocą NHibernate.',11,1)
    </sql-delete>

Как видите, каждый подкласс должен иметь свои собственные операторы sql. Базовый класс также может иметь свои собственные операторы. В этом примере я не разрешаю изменять экземпляры Базового класса через NHibernate

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