NHibernate:存储新对象时无法插入null异常
我正在尝试一个非常基本的NHibernate示例,但在session.Save()调用中出现异常。 这是我的模型:NHibernate:存储新对象时无法插入null异常,nhibernate,Nhibernate,我正在尝试一个非常基本的NHibernate示例,但在session.Save()调用中出现异常。 这是我的模型: public class Student { public virtual int ID { get; set; } public virtual string LastName { get; set; } public virtual string FirstMidName { get; set; } } 以下
public class Student
{
public virtual int ID { get; set; }
public virtual string LastName { get; set; }
public virtual string FirstMidName { get; set; }
}
以下是Student.hbm.xml文件:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns = "urn:nhibernate-mapping-2.2" assembly = "NHibernateDemoApp" namespace = "NHibernateDemoApp">
<class name = "Student">
<id name = "ID">
<generator class = "native"/>
</id>
<property name = "LastName"/>
<property name = "FirstMidName"/>
</class>
</hibernate-mapping>
它失败,出现以下错误:
无法将值NULL插入到表的“ID”列中
“NHibernateDemoDB.dbo.Student”;列不允许空值。插入
失败了
这里出了什么问题?我用以下脚本重新创建了我的表,现在它可以工作了:
CREATE TABLE [dbo].[Student] (
[ID] INT IDENTITY (1,1) NOT NULL,
[LastName] NVARCHAR (MAX) NULL,
[FirstMidName] NVARCHAR (MAX) NULL,
CONSTRAINT [PK_dbo.Student] PRIMARY KEY CLUSTERED ([ID] ASC)
)
native表示它在服务器端为SQL server使用标识。您的ID列是否在表定义中定义为Identity?谢谢回复。看起来我的表创建不正确。我重新创建了它,现在它工作了。很好,你找到了解决方案。但是,我想指出另外一点:如果DB将为ID属性赋值,那么您不应该自己为ID属性赋值。最好在ID属性上有一个私有setter。@FrederikGheysels是的,我理解。我只是在调试,我自己设置了Id的值,以检查它是否会保存它。现在我把它取下来了。
CREATE TABLE [dbo].[Student] (
[ID] INT IDENTITY (1,1) NOT NULL,
[LastName] NVARCHAR (MAX) NULL,
[FirstMidName] NVARCHAR (MAX) NULL,
CONSTRAINT [PK_dbo.Student] PRIMARY KEY CLUSTERED ([ID] ASC)
)