Nhibernate PrimaryKey должен быть уникальным - PullRequest
0 голосов
/ 14 декабря 2010

Я настроил проект Nhibernate в C # с локальной базой данных SQLite, и если возникла проблема при сохранении моего объекта Nhibernate, он говорит мне, что мой первичный ключ не уникален, это верно, но я добавил Generator в свой 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;
            }
        }
   }

Ответы [ 2 ]

1 голос
/ 14 декабря 2010

Я предлагаю настроить ваше отображение идентичности следующим образом:

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

Убедитесь, что поле PK является полем идентификации.

Затем в вашем отображении для продаж:

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

То же самое для вашей карты продаж.Убедитесь, что его сопоставление идентификаторов имеет несохраненное значение 0, а PK помечен как поле идентификации.

0 голосов
/ 15 декабря 2010

проблема была в том, что я использовал Транзакцию, без Транзакции она работала очень хорошо.

Спасибо Джеффри Джохуму за вашу помощь.

...