Nhibernate PrimaryKey必须是唯一的

时间:2010-12-13 21:00:13

标签: c# nhibernate hibernate primary-key

我在C#中使用本地SQLite数据库设置了一个Nhibernate项目,如果在保存我的Nhibernate对象时遇到问题,它告诉我,我的主键不是唯一的,这是正确的但我在我的nhibernate中添加了一个Generator -mapping。

这是班级:

  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>

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

是否存在已知问题?

非常感谢,Alex

销售地图:

<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;
            }
        }
   }

2 个答案:

答案 0 :(得分:1)

我建议您设置身份映射:

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

确保PK字段是标识字段。

然后在Sales的映射中:

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

您的销售映射也是如此。确保它的id映射的未保存值为0,PK被标记为标识字段。

答案 1 :(得分:0)

问题在于我使用的是交易,没有交易它运作得很好。

感谢Jeffrey Jochum的帮助。