【问题标题】:NHibernate many to many return null item in a listNHibernate 多对多返回列表中的空项
【发布时间】:2022-06-14 23:44:08
【问题描述】:

ItemBooker 之间存在多对多关系。 这是一个表格的例子:

create table Item (
    id int generated by default as identity primary key,
    name varchar(200) not null
);

CREATE TABLE Booker (
    id int generated by default as identity primary key,
    fisrtName varchar(200),
    lastName varchar(200)
);

create table Item_Booker (
    id int generated by default as identity primary key,
    itemId int not null references Item(id),
    bookerId int not null references Booker(id)
);

对应型号如下:

    public class Item : AbstractPersistentEntity
    {
        public virtual string Name { get; set; }
        public virtual IList<Booker> Bookers { get; set; }
    }

我使用这个映射:

<hibernate-mapping
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="urn:nhibernate-mapping-2.2" xsi:schemaLocation="urn:nhibernate-mapping-2.2 ../../nhibernate-mapping.xsd"
    namespace="BirthList.Core.Model" assembly="BirthList.Core">


    <class name="Item" table="item">
        <id name="Id" column="id">
            <generator class="identity"/>
        </id>
        <property name="Name" column="name"/>
        <!-- Association n-n -->
        <list name="Bookers" table="item_booker">
            <key column="itemId"/>
            <list-index column="id"/>
            <many-to-many class="Booker" column="bookerId"/>
        </list>
    </class>
</hibernate-mapping>

我的问题是,当我从数据库中检索数据时,我的 Booker 列表中的项目比预期的要多。并且额外的项目是空的(并且不存在于数据库中)。

我已经检查了 Booker 表的数据库并且只有这个项目:

对于 Item_booker 表,我只有这些:

这对应于我的以下两个项目:

有人有什么想法吗?

【问题讨论】:

    标签: nhibernate many-to-many nhibernate-mapping


    【解决方案1】:

    &lt;list-index column="id"/&gt;

    告诉 NHibernate 将 id 视为索引。因为它从 1 开始,它将在索引 1 处插入记录,因此索引 0 处必须为 null。您可能想要的是 orderby="id"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 2014-04-10
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      相关资源
      最近更新 更多