当 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);
}
我有一个 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; }
您收到此错误的原因是因为 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);
}