Проблема с генерацией идентичности при использовании nHibernate с MySql - PullRequest
0 голосов
/ 13 октября 2010

Пожалуйста, помогите!Я новичок в nHibernate и застрял на проблеме - я не могу создать новый постоянный объект с помощью NHibernate (2)

В этом коде:

foreach (var item in items)
{
 if (item.price > 0)
 {
  if (_itemsForBuy.FirstOrDefault(i => item.itemid == i.itemId) == null)
  {
   var ifb = new ItemForBuy()
   {
    id = 0,
    item = item,
    count = 100
   };

   ISession session = SessionHelper.CurrentSession;
   ifb.id = (int)session.Save(ifb); //at first iteration returs 0, at second - exception
   _itemsForBuy.Add(ifb);
  }
 }
}

... во второй итерации выдает исключение:

не удалось вставить: [xxx.ItemForBuy] [SQL: INSERT INTO itemsforbuy (count, itemid) VALUES (?,?)]

с внутренним исключением:

Повторяющаяся запись '0' для ключа 'PRIMARY'

ItemForBuy.hbm.xml:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="xxx"
                   namespace="xxx">

  <class name="ItemForBuy" table="itemsforbuy" lazy ="false">

    <id name="id" type="Int32" column="id" unsaved-value="0">
      <generator class="identity"/>
    </id>
...

класс:

public class ItemForBuy
{
 public int id
 {
  get;
  set;
 }
...

в дБ:

CREATE  TABLE IF NOT EXISTS `xxx`.`itemsforbuy` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `itemid` INT NOT NULL ,
  `count` INT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB

Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 13 октября 2010

Попробуйте этот генератор:

<id name="Id" column="Id" type="int">
    <generator class="native"></generator>
</id>

NHibernate и MySql - простой пример использования

1 голос
/ 13 октября 2010

Проблема решена. Причина была не в поле AUTO_INCREMENT 'id'. Я не синхронизировал MySQL Workbench с БД и думал, что id - это автоинкремент, но это не так

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...