継承する必要がある基本クラスを含むコア アセンブリを持つアプリケーションがあります。これらをデータベースに保存する必要があり、NHibernate について読んだ後、それを使用することにしました。
ただし、新しく継承したクラスの 1 つに問題があります。サブクラス マップをセットアップしましたが、保存すると、基本クラスのプロパティも、マッピングで割り当てた新しいプロパティも保存されません。
私のクラスは次のようにレイアウトされています: (小さなデモアプリから)
コア アセンブリ DataItem -> ユーザー
データベースに触れるものはすべて、ID、変更日などを処理するため、DataItem クラスを継承します。
私のテストでは、FirstName のみを持つようにユーザーをセットアップしました。
新しいユーザーを保存するとうまくいきます..ただし、ユーザーから継承してから、LastName という別のプロパティを追加し、この新しいオブジェクトを保存しようとすると.. INSERT INTO t_User (id) VALUES(? .. 名または姓を保存しようとしません.. 両方が設定され、マップされています。
私の nhibernate.config:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory name="DAL">
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="adonet.batch_size">16</property>
<property name="current_session_context_class">web</property>
<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
<mapping assembly="DAL"/>
<mapping assembly="NHibernateDemo"/>
</session-factory>
</hibernate-configuration>
ご覧のとおり、2 つのアセンブリがあります。私の DAL は私のコアであり、NHibernateDemo は継承のためにコアを使用する Web アプリケーションです。
私のコア DataItem マッピング:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="DAL" namespace="DAL.Model">
<class name="DataItem" table="t_DataItem" >
<id name="Id">
<generator class="native" />
</id>
<discriminator column="typeid" type="System.Int32"></discriminator>
<property name="IsActive" column="isActive" not-null="true" />
<property name="TypeId" column="typeId" not-null="true"></property>
<many-to-one name="Parent" column="ParentId" class="DataItem"></many-to-one>
<bag name="Children" cascade="all-delete-orphan">
<key column="ParentId"></key>
<one-to-many class="DataItem"/>
</bag>
<joined-subclass name="User" table="t_Users">
<key column="id"></key>
<property name="FirstName" column="firstName" not-null="true" ></property>
</joined-subclass>
<joined-subclass name="Email" table="t_Emails">
<key column="emailid"></key>
<property name="Address" column="Address"></property>
</joined-subclass>
</class>
</hibernate-mapping>
機能しない継承された NewUser マッピング!:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernateDemo" namespace="NHibernateDemo.Model">
<subclass name="NewUser" extends="DAL.Model.User, DAL" discriminator-value="1">
<property name="LastName" column="LastName"></property>
</subclass>
クラス NewUser を保存しようとすると、基本プロパティまたは新しく宣言されたプロパティから、他のプロパティ セットを保存しようとしないのはなぜですか?
これに対する助けや洞察を本当に感謝します..本当に単純なものが欠けているに違いなく、それを見ることができません。
ありがとう、
マイク