尽管在《NHibernate随笔(1)》中,已经提到了由于CodeSmith版本问题,需要修改**.hbm.xml中xmlns="urn:nhibernate-mapping-2.2"。但我总是忘记,故再次强调。(CodeSmith5.1 NHibernate2.0)
今天在练手的时候,session.Save(blog)方法出错了:用户代码未处理GenericADOException could not insert:[Model.Blog][SQL:INSERT INTO Blog(name,items)values(?,?);select SCOPE_IDENTITY()]
当时有点莫名其妙,我的Bolg明明有三个字段的,怎么insert的sql语句里没有“ID”嘞?
事实上,这是Blog构造函数导致的。
public Blog( string name, string items )
{
this._name = name;
this._items = items;
}
不知道为什么CodeSmith要这样生成,我在数据库中的ID并没有标识增量,它是varchar型的。Blog.hbm.xml对ID有<generator class="native" />(),为什么它要这样地生成呢?呵呵 这恐怕要问Smith本人了。
于是,改为<generator class="assigned" />,再改了下Blog.cs构造函数就OK了。
还有一件蛮神奇的事情,我在~\Microsoft Visual Studio 9.0\Xml\Schemas下添了nhibernate-configuration.xsd和nhibernate-mapping.xsd文件,所以在项目中进行NHibernate配置会有智能提示。如图:
但奇怪的是,我在另一项目进行配置时,却没有此类提示。如图:
====================
无语了,这是我在几天前遇到的“奇异事件”,但是今天又一切正常了...
====================
最近项目的事情还蛮多的,得抓紧时间干啦~