Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
连接子类问题的NHibernate子类_Nhibernate_Subclass_Joined Subclass - Fatal编程技术网

连接子类问题的NHibernate子类

连接子类问题的NHibernate子类,nhibernate,subclass,joined-subclass,Nhibernate,Subclass,Joined Subclass,我有一个应用程序,它有一个核心程序集,需要从中继承基类。。我需要将这些保存到数据库中,在阅读了有关NHibernate的内容后,我决定使用它 但是,我的一个新继承类有一个问题。。我已经设置了子类映射,但是当我保存时,它既不尝试保存它的任何基类属性,也不尝试保存我在映射中指定的任何新属性 我的课程安排如下:(来自一个小的演示应用程序) 堆芯组件 数据项->用户 任何与数据库相关的操作都会继承DataItem类,因为它会处理id、修改日期等 在我的测试中,我将用户设置为只有名字 如果我保存了一个新用

我有一个应用程序,它有一个核心程序集,需要从中继承基类。。我需要将这些保存到数据库中,在阅读了有关NHibernate的内容后,我决定使用它

但是,我的一个新继承类有一个问题。。我已经设置了子类映射,但是当我保存时,它既不尝试保存它的任何基类属性,也不尝试保存我在映射中指定的任何新属性

我的课程安排如下:(来自一个小的演示应用程序)

堆芯组件 数据项->用户

任何与数据库相关的操作都会继承DataItem类,因为它会处理id、修改日期等

在我的测试中,我将用户设置为只有名字

如果我保存了一个新用户,效果会很好。。但是,当我从用户继承,然后添加另一个名为LastName的属性并尝试保存此新对象时。。它只将INSERT的sql语句组合到t_用户(id)值(?)。。它不会尝试保存名字或姓氏。。尽管两者都已设置并已映射,但也可以

我的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>

NHibernate.dialogue.mssql2005dialogue
NHibernate.Connection.DriverConnectionProvider
NHibernate.Driver.SqlClientDriver
16
网状物
NHibernate.ByteCode.Castle.proxyFactory,NHibernate.ByteCode.Castle
如你所见,我有两个组件。。我的DAL是我的核心,NHibernateDemo是一个使用核心进行继承的web应用程序

我的核心数据项映射:

<?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时,它不尝试保存任何其他属性集,无论是从它的基属性还是新声明的属性

我真的非常感谢任何对这方面的帮助或见解。。我一定错过了一些非常简单的东西,我就是看不到

谢谢

迈克
可能是您无法在同一类层次结构中混合子类和联接子类映射。由于DataItem和User是通过联接子类关联的,所以可能需要将NewUser类设置为User的另一个联接子类

另一个问题可能是在当前新用户映射中使用“鉴别器”。鉴别器应该是用户表中的附加列,NHibernate使用该列来区分用户记录和新用户记录之间的差异。我不确定在用户基类可能没有指定其鉴别器值的情况下,这种方法是否有效,而NewUser可以。我不确定您是否在任何地方指定了鉴别器列,这可能也是一个问题


我建议首先尝试将NewUser作为User的联接子类。

可能是您无法在同一类层次结构中混合使用子类和联接子类映射。由于DataItem和User是通过联接子类关联的,所以可能需要将NewUser类设置为User的另一个联接子类

另一个问题可能是在当前新用户映射中使用“鉴别器”。鉴别器应该是用户表中的附加列,NHibernate使用该列来区分用户记录和新用户记录之间的差异。我不确定在用户基类可能没有指定其鉴别器值的情况下,这种方法是否有效,而NewUser可以。我不确定您是否在任何地方指定了鉴别器列,这可能也是一个问题


我建议首先尝试将NewUser作为User的联接子类。

也许我误解了“联接”一词的用法。这是否表示它将在执行select查询时尝试执行联接?我的newuser类将其数据保存在与user类相同的表中。。有一个类型id,但它属于dataitem。。我认为这可能是个问题。我要试试你的建议!!!谢谢你的指导。好的。。我刚刚尝试将我的NewUser映射切换为user的一个连接子类,它仍然尝试使用以下“INSERT into t_Users(id)value(?)保存到我的user表中”…所以它没有试图保存firstname或lastname属性..可能我误解了“joined”一词的用法。这是否表明它将在执行选择查询时尝试执行联接?我的newuser类将其数据保存在与user类相同的表中..有一个类型id,但它属于dataitem..我看到了可能是个问题。我要试试你的建议!!!谢谢你的指导。好的..我刚刚尝试将我的NewUser映射切换为user的一个联接子类,它仍然尝试使用以下“INSERT into t_Users(id)value(?)”保存到我的user表中。。因此,它不会试图保存firstname或lastname属性。。