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

Entity framework core EF Core将Id设置为Int.MinValue并尝试在数据库中插入,entity-framework-core,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", Typ

我正在使用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; }
在这里,我创建并初始化一个新的PRAT对象:

var prat = new PRAT();
prat.PRATICA = "Prova";
prat.ANNO = 2000;
prat.VARIANTE = "0";
context.PRAT.Add(prat);
context.SaveChangesAsync();
就在context.PRAT.Add(PRAT)行之后,如果我检查PRAT.ID成员,就会得到类似-2147482647的结果

在context.savechangessync之后,我收到错误“当identity\u insert设置为OFF时,无法在表'Prat'中为identity列插入显式值”

这是生成的SQL语句:

INSERT INTO [Prat] ([Id], [Anno], [Pratica], [Variante]) VALUES (@p0, @p1, @p2, @p3);
如您所见,Id字段已添加到字段列表中,但此字段是Identity

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

生成的SQL语句是

INSERT INTO [Prat] ([Anno], [Pratica], [Variante]) VALUES (@p0, @p1, @p2);
一切都很好


谢谢。

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

我认为您需要使用属性配置您的模型,或者使用


你在使用迁移吗?这对我来说很好。(与上述代码完全相同)。你用的是哪个版本的EF Core?对不起,我迟到了。我不使用迁移,我使用的是EF Core的1.1.2版。感谢you@user7817808EF核心版本信息对于此类问题至关重要。即使这是早期EF Core中的一个问题,它早就应该被修复了。Microsoft.EntityFrameworkCore 2.2.1,至少在我的情况下根据异常消息,数据库列已经是identity—“当identity\u insert设置为OFF时,无法在表'Prat'中插入identity列的显式值”
INSERT INTO [Prat] ([Anno], [Pratica], [Variante]) VALUES (@p0, @p1, @p2);
...
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column("Id")]
public int ID { get; set; }
...