EF Core将Id设置为Int.MinValue并尝试插入数据库中

sky*_*fer 5 entity-framework-core

我正在使用EF Core,并且在保存新实体时遇到问题。

这是我的模特班

[Column("Id")]
public int ID { get; set; }
[Required]
[Column("Pratica", TypeName = "varchar(10)")]
public string PRATICA { get; set; }
[Column("Anno")]
public int ANNO { get; set; }
[Required]
[Column("Variante", TypeName = "varchar(2)")]
public string VARIANTE { get; set; }
Run Code Online (Sandbox Code Playgroud)

在这里,我创建并初始化一个新的PRAT对象:

var prat = new PRAT();
prat.PRATICA = "Prova";
prat.ANNO = 2000;
prat.VARIANTE = "0";
context.PRAT.Add(prat);
context.SaveChangesAsync();
Run Code Online (Sandbox Code Playgroud)

就在context.PRAT.Add(prat)行之后,如果我检查prat.ID成员,我会得到类似-2147482647的信息

在context.SaveChangesAsync之后,出现错误“当IDENTITY_INSERT设置为OFF时,无法在表'Prat'中为标识列插入显式值”

这是生成的SQL语句:

INSERT INTO [Prat] ([Id], [Anno], [Pratica], [Variante]) VALUES (@p0, @p1, @p2, @p3);
Run Code Online (Sandbox Code Playgroud)

如您所见,Id字段已添加到字段列表中,但此字段是Identity!

如果在context.SaveChangesAsync()之前设置

prat.ID = 0
Run Code Online (Sandbox Code Playgroud)

生成的SQL语句是

INSERT INTO [Prat] ([Anno], [Pratica], [Variante]) VALUES (@p0, @p1, @p2);
Run Code Online (Sandbox Code Playgroud)

而且一切正常。

谢谢。

Ahm*_*lan 0

主键属性的类型为 int,按照惯例,EF Core 假定数据库将在添加新行时使用 SQL IDENTITY 命令创建唯一键。因此,您必须将数据库列定义为标识列。