C# Nhibernate PrimaryKey必须是唯一的

C# Nhibernate PrimaryKey必须是唯一的,c#,nhibernate,hibernate,primary-key,C#,Nhibernate,Hibernate,Primary Key,我在C#中使用本地SQLite数据库设置了一个Nhibernate项目,如果在保存我的Nhibernate对象时遇到问题,它会告诉我primarykey不是唯一的,没错,但我在Nhibernate映射中添加了一个生成器 下面是课堂: public class Article { public virtual int ArticleId { get; set; } public virtual string Name { get; set;

我在C#中使用本地SQLite数据库设置了一个Nhibernate项目,如果在保存我的Nhibernate对象时遇到问题,它会告诉我primarykey不是唯一的,没错,但我在Nhibernate映射中添加了一个生成器

下面是课堂:

  public class Article
      {

          public virtual int ArticleId { get; set; }
          public virtual string Name { get; set; }
          public virtual double Price { get; set; }
          public virtual string ArticleNumber { get; set; }
          public virtual string Description { get; set; }

          public virtual Sales Sales {get; set;}
     }
这是映射文件:

<class name="Article">
    <id name="ArticleId">
      <generator class="identity" />
    </id>
    <property name="Name" />
    <property name="Price" />
    <property name="ArticleNumber" />
    <property name="Description" />

    <many-to-one name="Sales" class="Sales" column="SalesId"/>

</class>

我正在创建一些文章,并将其添加到销售中,如果我想保存我的销售,它会得到这个PrimaryKey异常

是否存在已知问题

非常感谢,亚历克斯

销售映射:

<class name="Sales">
    <id name="SaleId" unsaved-value="0">
      <generator class="identity" />
    </id>
    <property name="Amount" />
    <property name="Price" />

    <bag name="OrderList" cascade="all">
      <key column="ArticleId"/>
      <one-to-many class="Article"/>
    </bag>

  </class>

public class Sales
    {
        public Sales()
        {
            if (this.orderList == null)
                orderList = new List<Article>();
        }

        private IList<Article> orderList;

        public virtual int SaleId { get; set; }
        public virtual double Price { get; set; }
        public virtual int Amount { get; set; }

        public virtual IList<Article> OrderList 
        {
            get
            {
                return this.orderList;
            }
            set
            {

                this.orderList = value;
            }
        }
   }

公务舱销售
{
公开销售()
{
if(this.orderList==null)
orderList=新列表();
}
私有IList订单列表;
公共虚拟int SaleId{get;set;}
公共虚拟双价格{get;set;}
公共虚拟整数量{get;set;}
公共虚拟IList订单列表
{
得到
{
返回此.orderList;
}
设置
{
this.orderList=值;
}
}
}

我建议将您的身份映射设置为:

<id name="ArticleId" unsaved-value="0">
  <generator class="native" />
</id>

确保PK字段是标识字段

然后在销售映射中:

<many-to-one name="Sales" class="Sales" column="SalesId" insert="true" update="true"/>


同样的事情也适用于您的销售映射。确保其id映射的未保存值为0,并且PK标记为标识字段。

问题在于我使用的是事务,没有事务,它工作得很好


感谢Jeffrey Jochum的帮助。

您的数据库架构是如何生成的?PK是否创建为标识列?Nhibernate正在创建数据库架构(:我没有连接到现有数据库。我是否应该在另一端实现相同的更改?是。如果可以,发布销售映射文件。我已将销售映射添加到post中,未保存的值=“0”属性是newOh,我已经修复了一个小错误,映射的列标识是SaleId,但它没有修复其他问题包“OrderList”应该设置为reverse=“False”。我想发生的是销售实体正在保存文章,然后试图保存销售对象。