当我执行我的" little"程序使用NHibernate
SqlException: Cannot insert the value NULL into column 'EmployeeId', table 'NHibernateDemoDB.dbo.Employee'; column does not allow nulls. INSERT fails.
我的方法是:
private void SetEmployeeInfo(Employee employeeData)
{
employeeData.FirstName = txtFirstName.Text;
employeeData.LastName = txtLastName.Text;
}
和我的映射文件:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" auto-import="true" namespace="NHibernateWinFormsApp" assembly="NHibernateWinFormsApp">
<class name="NHibernateWinFormsApp.Employee, NHibernateWinFormsApp" lazy="true">
<id name="EmployeeId">
<generator class="native"/>
</id>
<property name="FirstName" column="FirstName"/>
<property name="LastName" column="LastName"/>
</class>
</hibernate-mapping>
有人有想法吗? 谢谢,
答案 0 :(得分:2)
您的列定义在数据库中的表上肯定是错误的,缺少identity
规范。
由于您已使用生成器native
映射了id,该解析器为sql-server解析为identity
,因此NHibernate尝试插入实体而不指定Id EmployeeId
的值,因为它应该在数据库插入时自动生成。
由于它在那时失败,这意味着您的表定义无效,它没有将EmployeeId
设置为Identity
列,导致它不会在插入时自动生成,因此缺少价值。
您必须在数据库中的表上修改列定义。
否则,请为您的id选择另一个generator strategy,其中一个与您的数据库架构兼容。
答案 1 :(得分:-2)
该列不允许null。正如消息错误所说。
获取null时需要指定一个值。使用ISNULL功能。