我有一张表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并自动添加。但我想手动添加它,如果它被取消,然后自动生成。
答案 0 :(得分:2)
首先,您的ID列永远不会为null,因为您使用的是int类型而不是可以为null的int类型。
您可以将public int ID { get; set; }
更改为public int? ID { get; set; }
您收到此错误的原因是因为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);
}