我有一个应用程序,它有一个核心程序集,其中包含我需要继承的基类。我需要将它们保存到数据库中,并且在阅读了 NHibernate 之后决定使用它。
但是,我的一个新继承类有问题。我已经设置了子类映射,但是当我保存时,它既不会尝试保存它的任何基类属性,也不会尝试保存我在映射中分配的任何新属性!
我的课程布局如下:(来自一个小型演示应用程序)
核心组件 DataItem -> 用户
任何会触及数据库的东西都会继承 DataItem 类,因为它会处理 id、修改日期等。
在我的测试中,我将用户设置为只有一个名字..
如果我保存一个新用户,它会很好用..但是当我从用户继承然后添加另一个名为 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 时它没有尝试保存任何其他属性集,无论是从它的基础属性还是新声明的属性?
我真的很感谢对此的任何帮助或洞察力。我一定错过了一些非常简单的东西,我只是看不到它。
谢谢,
麦克风