Sql server nHibernate主详细信息删除

Sql server nHibernate主详细信息删除,sql-server,nhibernate,Sql Server,Nhibernate,我已配置主-明细关系。下面是hbm文件。当我运行这样的代码时 Favourite favourite = favourites.Find(f => f.Id== id); user.Favourites.Remove(favourite); m_UserRepository.Save(ref user); 我收到了错误信息 NHibernate.Exceptions.GenericADOException:无法删除集合行:[Model.Entities.User.favorites#24

我已配置主-明细关系。下面是hbm文件。当我运行这样的代码时

Favourite favourite = favourites.Find(f => f.Id== id);
user.Favourites.Remove(favourite);
m_UserRepository.Save(ref user);
我收到了错误信息

NHibernate.Exceptions.GenericADOException:无法删除集合行:[Model.Entities.User.favorites#249][SQL:SQL不可用]-->System.Data.SqlClient.SqlException:无法将值NULL插入列“UserId”,表“BE.favorite”;列不允许空值。更新失败。

任何关于这意味着什么的建议,请帮助

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Model.Entities" schema="BE" assembly="Model" default-lazy="false">
  <class name="Model.Entities.User, Model" table="Users" >
    <id name="UserId" column="UserId" type="int" unsaved-value="0">
      <generator class="native" />
    </id>
    <property name="UserName" column="UserName" type="string" />

    <bag name="Favourites" cascade="all" lazy="true">
      <key column="UserId"/>
      <one-to-many class="Model.Entities.Favourite, Model"/>
    </bag>

  </class>
</hibernate-mapping>

尝试将级联规则更改为:

<bag name="Favourites" cascade="all,delete-orphan" lazy="true">
  <key column="UserId" not-null="true"/>
  <one-to-many class="Model.Entities.Favourite, Model"/>
</bag>


您是否尝试过在您的包上设置
inverse=“true”

在这种情况下,您实际上需要多对多关系:

<class name="User">
  <id name="Id">
    <generator class="native">
      <param name="sequence">object_sequence</param>
    </generator>
  </id>
  <version name="Version" />
  <property name="Name" />
  <set name="Roles" table="User_Favourite">
    <key column="UserId"/>
    <many-to-many column="FavouriteId" class="Favourite"/>
  </set>
</class>

对象序列
另一方面也是一样:(*注意反方向=“true”)


对象序列
:

非常重要的注意事项:如果
关联的
列声明为
非空
,则NHibernate在创建或更新关联时可能会导致约束冲突。为防止此问题,必须使用双向关联,将多值端(集合或包)标记为
inverse=“true”
。请参阅本章后面关于双向关联的讨论

最后,我不确定你是否真的想在这里用包。一个用户可以拥有相同的收藏夹两次或多次


另外,请注意,自NHibernate1.2以来,lazy=“true”是默认行为。

抱歉,请尝试此操作。忘记了not null标记。设置inverse=“true”将使其生效,以便他在删除主控形状后必须手动删除详细信息。我不知道这是不是他的目的。对我来说,这解决了问题。它在删除父对象时删除子对象。
<class name="Favourite">
  <id name="Id">
    <generator class="native">
      <param name="sequence">object_sequence</param>
    </generator>
  </id>
  <version name="Version" />
  <property name="RoleName" />
  <set name="Users" table="User_Favourite" inverse="true">
    <key column="FavouriteId"/>
    <many-to-many column="UserId" class="User"/>
  </set>
</class>