SqlException:无法将值NULL插入列' x&#39 ;;列不允许空值。 INSERT失败

时间:2017-05-30 14:07:16

标签: c# sql sql-server nhibernate

当我执行我的" 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>

有人有想法吗? 谢谢,

2 个答案:

答案 0 :(得分:2)

您的列定义在数据库中的表上肯定是错误的,缺少identity规范。

由于您已使用生成器native映射了id,该解析器为sql-server解析为identity,因此NHibernate尝试插入实体而不指定Id EmployeeId的值,因为它应该在数据库插入时自动生成。

由于它在那时失败,这意味着您的表定义无效,它没有将EmployeeId设置为Identity列,导致它不会在插入时自动生成,因此缺少价值。

您必须在数据库中的表上修改列定义。

否则,请为您的id选择另一个generator strategy,其中一个与您的数据库架构兼容。

答案 1 :(得分:-2)

该列不允许null。正如消息错误所说。

获取null时需要指定一个值。使用ISNULL功能。