NHibernate:存储新对象时无法插入null异常

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; } } 以下

我正在尝试一个非常基本的NHibernate示例,但在session.Save()调用中出现异常。 这是我的模型:

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