将值插入非身份密钥字段:DB First

时间:2016-05-09 08:05:07

标签: c# sql-server entity-framework identity ef-database-first

在处理 EF 6数据库第一种方法时遇到一个小问题。

当我尝试将值插入未设置为Identity的表的键字段时,我收到以下异常:

  

无法将值NULL插入列'emp_main_id',列不允许空值。 INSERT失败。
  声明已经终止。

我在实体类中添加了以下代码以避免错误

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int emp_main_id { get; set; }

但仍然无法正常工作。

以下是创建数据库表的脚本

    CREATE TABLE [dbo].[EmployeesMain] (
    [emp_main_id]          INT            NOT NULL,
    [emp_main_first]       NVARCHAR (40)  NOT NULL,
    [emp_main_middle]      NVARCHAR (40)  NULL,
    [emp_main_last]        NVARCHAR (40)  NOT NULL,
    [emp_main_dob]         DATE           NOT NULL,
    [emp_main_gender]      INT            DEFAULT ((1)) NOT NULL,
    [emp_main_type]        INT            DEFAULT ((0)) NOT NULL,
    [emp_main_email]       NVARCHAR (150) NOT NULL,
    [emp_main_password]    NVARCHAR (MAX) NOT NULL,
    [emp_main_designation] NVARCHAR (150) NULL,
    [emp_main_skill]       NVARCHAR (MAX) NULL,
    [emp_main_contract]    INT            DEFAULT ((0)) NOT NULL,
    [emp_main_lead]        NVARCHAR (81)  NULL,
    [emp_main_img]         NVARCHAR (MAX) NULL,
    [emp_main_doj]         DATE           DEFAULT ('01-JAN-2012') NULL,
    CONSTRAINT [emp_main_primary_key] PRIMARY KEY ([emp_main_id])
);

对此有任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

  1. 问题是您是否尝试将NULL值插入主键 列,即emp_main_id。
  2. 主键不允许插入NULL值或重复值。
  3. 如果要插入NULL值,请删除主键约束。

答案 1 :(得分:0)

决定自己写答案。

问题是,由于我之前已将字段设置为标识,因此字段的值将自动生成。即使在删除标识并从数据库更新模型后,也没有重置。

所以我必须做的是,

  
      
  1. 转到.edmx文件。
  2.   
  3. 右键单击属性“emp_main_id”
  4.   
  5. 点击属性
  6.   
  7. StoreGeneratedPatter 设置为
  8.   
  9. 保存模型并重建解决方案
  10.   

就是这样。它为我提供了一个非身份密钥,包含所有其他约束以及明确输入字段值的选项。和平:))