我會告訴你我是如何做到這
<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修改基類實例
感謝您的回覆。所以我明白了,我需要爲對象B和C創建兩個不同的存儲過程,並且如果B和C中屬性的數量不同,那麼傳遞給存儲過程的參數數量將不同於好? – Akey 2009-11-11 15:38:12