请帮忙!我是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(?, ?)]
内部异常:
键'PRIMARY'重复输入'0'
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;
}
...
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
我做错了什么?
答案 0 :(得分:2)
试试这个发电机:
<id name="Id" column="Id" type="int">
<generator class="native"></generator>
</id>
答案 1 :(得分:1)
问题解决了。原因是没有AUTO_INCREMENT'id'字段。我没有将MySQL Workbench与DB同步,我认为id是自动增量,但事实并非如此。