当IDENTITY_INSERT设置为OFF

时间:2018-01-13 05:05:27

标签: c# entity

我有一张表Worker

 public class Worker
 {
        public int ID { get; set; }
        public string Firstname { get; set; }
        public string Lastname { get; set; }
        public string Fathername { get; set; }
        public string email { get; set; }
        public string Company_name { get; set; }    
}  

我尝试添加新工作人员:

new Worker { Firstname = "John", Lastname = "Rambo", Fathername = "First_Blood", email = "Rocky@hh.ru", Company_name = "Survive" },

我在上次调试的应用程序洞察中遇到错误

  

Microsoft.EntityFrameworkCore.DbUpdateException:更新条目时发生错误。有关详细信息,请参阅内部异常

     

System.Data.SqlClient.SqlException:当IDENTITY_INSERT设置为OFF时,无法在表'Worker'中为identity列插入显式值。

     

at System.Data.SqlClient.SqlConnection.OnError(SqlException exception,Boolean breakConnection,Action`1

当然我可以删除ID并自动添加。但我想手动添加它,如果它被取消,然后自动生成。

1 个答案:

答案 0 :(得分:2)

首先,您的ID列永远不会为null,因为您使用的是int类型而不是可以为null的int类型。

您可以将public int ID { get; set; }更改为public int? ID { get; set; }

,从而使您的int类型可为空

您收到此错误的原因是因为IDENTITY_INSERT在您的数据库中设置为off。

如果将以下属性/约定应用于类中的属性并更新对数据库的更改,则应该发现允许您插入标识列。

public class Worker
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int ID { get; set; }
    public string Firstname { get; set; }
    public string Lastname { get; set; }
    public string Fathername { get; set; }
    public string email { get; set; }
    public string Company_name { get; set; }    
} 

或者,您可以使用OnModelCreating重载;

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Worker>().Property(x => x.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
}