当 IDENTITY_INSERT 设置为 OFF 时,无法为身份手动插入 ID 实体插入显式值

Cannot insert explicit value for identity insert ID manually entity when IDENTITY_INSERT is set to OFF

我有一个 table 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: An error occurred while updating the entries. See the inner exception for details.

System.Data.SqlClient.SqlException: Cannot insert explicit value for identity column in table 'Worker' when IDENTITY_INSERT is set to OFF.

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

当然我可以删除 ID,它会自动添加。但我想手动添加它,如果它为空则自动生成。

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

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

让您的 int 类型可为空

您收到此错误的原因是因为 IDENTITY_INSERT 在您的数据库上设置为关闭。

如果您将以下 attribute/convention 应用到 class 中的 属性 并将更改更新到数据库,您应该会发现您可以插入到标识列中。

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