2010-10-13 2 views
0

S'il vous plaît, aidez! Je nouvelle à NHibernate et je coincé sur problème - je ne peux pas créer un nouvel objet via NHibernate persisté (2)Problème avec la génération d'identité lors de l'utilisation de nHibernate avec MySql

Dans ce code:

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

... sur exception lancée deuxième itération:

ne pouvait pas insérer: [xxx.ItemForBuy] [SQL: iNSERT INTO itemsforbuy (nombre, itemid) VALUES (, ?)]

à l'exception intérieure:

entrée en double '0' pour la touche 'primaire'

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> 
... 

Classe:

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

in db:

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 

Ce que je fais mal?

Répondre

1

Problème résolu. La raison était dans le champ 'id' AUTO_INCREMENT. Je n'ai pas synchronisé MySQL Workbench avec DB, et je pensais que id était incrément automatique, mais ce n'était pas vrai.

Questions connexes