未更新NHibernate多对多表

未更新NHibernate多对多表,nhibernate,many-to-many,bidirectional-relation,Nhibernate,Many To Many,Bidirectional Relation,我有3个表,它们是“新闻”、“标签”、“新闻标签”,具有多对多关系 通过以下映射,“新闻”和“标签”表已更新,但“新闻标签”尚未更新 有人能帮我吗 新闻: 标签: 新闻标签 <class name="NewsTags" table="News_Tags" lazy="false"> <id name="NewsTagID"> <generator class="identity" /> </id> <pro

我有3个表,它们是“新闻”、“标签”、“新闻标签”,具有多对多关系

通过以下映射,“新闻”和“标签”表已更新,但“新闻标签”尚未更新

有人能帮我吗

新闻:


标签:


新闻标签

<class name="NewsTags" table="News_Tags" lazy="false">
  <id name="NewsTagID">
    <generator class="identity" />
  </id>    
  <property name="TagID"/>
  <property name="NewsID"/>
</class>

非常感谢


道明。

这张地图上有些奇怪的东西

  • 两个集合,
    TagsList
    NewsList
    ,都是相反的。所以NHibernate不存储它们。反向表示:“此信息已在另一个集合中,因此在存储时忽略此信息”。只在双向关系的一侧放置反向
  • 新闻标签
    被映射为类,即使它不是类。它只是数据库中的一个表,用于映射(双向)多对多关系。只需删除这个类映射
  • 级联由两个集合设置。如果
    News
    实例引用了新的标记,我不确定您是否要创建新的标记,但您很可能永远都不想创建新的
    News
    实例,因为它们被某个标记引用。我会把它移到那里

我同意@Stefan的观点,您的映射不正确。如果我正确理解了News和标记之间的多对多关系,那么News_标记就是您的连接/连接表,在这种情况下,您不必提供映射文件

新闻和标记的映射文件应该负责连接/联接表,而不必映射它。考虑我在用户和角色之间的映射,这是多对多的,希望这能提供一些指导。 用户映射

<?xml version="1.0"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="false">

<class name="BM.BEAST.Core.Common.User, BM.BEAST.Core" table="[User]" lazy="false">
  <id name="ObjId" column="ObjId" type="Guid">
    <generator class="guid"/>
  </id>
  <property name="UserName" column="UserName" type="String" not-null="true"/>
  <property name="FirstName" column="FirstName" type="String" not-null="true"/>
  <property name="LastName" column="LastName" type="String" not-null="true"/>
  <property name="Initials" column="Initials" type="String" not-null="true"/>
  <property name="LastLoginDtm" column="LastLoginDtm" type="Timestamp"/>
  <property name="Disabled" column="Disabled" type="Boolean"/>
  <property name="OnLine" column="OnLine" type="Boolean"/>    
  <bag name="Roles" table="UserRole" lazy="true">
    <key column="UserObjId"/>
    <many-to-many class="BM.BEAST.Core.Common.Role, BM.BEAST.Core" column="RoleObjId"/>
  </bag>
  <bag name="Sessions" table="Session" lazy="true" cascade="all-delete-orphan">
    <key column="ActiveUser"/>
    <one-to-many class="BM.BEAST.Core.Common.Session, BM.BEAST.Core" not-   found="ignore"/>
  </bag>
</class>

角色映射

<?xml version="1.0"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="false">

  <class name="BM.BEAST.Core.Common.Role, BM.BEAST.Core" table="[Role]" lazy="false">
    <id name="ObjId" column="ObjId" type="Guid">
      <generator class="guid"/>
    </id>
    <property name="Code" column="Code" type="String" not-null="true"/>
    <property name="Name" column="Name" type="String" not-null="true"/>
    <property name="Sequence" column="Sequence" type="Int16" not-null="true"/>
  </class>

</hibernate-mapping>


很抱歉,我无法打断部分行,否则它将不会显示。您需要在每行的开头加4个空格才能将其格式化为代码。除非它被删除或隐藏,因为它被解释为HTML。非常感谢。你节省了我的时间。好孩子。
<?xml version="1.0"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="false">

<class name="BM.BEAST.Core.Common.User, BM.BEAST.Core" table="[User]" lazy="false">
  <id name="ObjId" column="ObjId" type="Guid">
    <generator class="guid"/>
  </id>
  <property name="UserName" column="UserName" type="String" not-null="true"/>
  <property name="FirstName" column="FirstName" type="String" not-null="true"/>
  <property name="LastName" column="LastName" type="String" not-null="true"/>
  <property name="Initials" column="Initials" type="String" not-null="true"/>
  <property name="LastLoginDtm" column="LastLoginDtm" type="Timestamp"/>
  <property name="Disabled" column="Disabled" type="Boolean"/>
  <property name="OnLine" column="OnLine" type="Boolean"/>    
  <bag name="Roles" table="UserRole" lazy="true">
    <key column="UserObjId"/>
    <many-to-many class="BM.BEAST.Core.Common.Role, BM.BEAST.Core" column="RoleObjId"/>
  </bag>
  <bag name="Sessions" table="Session" lazy="true" cascade="all-delete-orphan">
    <key column="ActiveUser"/>
    <one-to-many class="BM.BEAST.Core.Common.Session, BM.BEAST.Core" not-   found="ignore"/>
  </bag>
</class>
<?xml version="1.0"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="false">

  <class name="BM.BEAST.Core.Common.Role, BM.BEAST.Core" table="[Role]" lazy="false">
    <id name="ObjId" column="ObjId" type="Guid">
      <generator class="guid"/>
    </id>
    <property name="Code" column="Code" type="String" not-null="true"/>
    <property name="Name" column="Name" type="String" not-null="true"/>
    <property name="Sequence" column="Sequence" type="Int16" not-null="true"/>
  </class>

</hibernate-mapping>