我正在使用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.SaveChangesAsync之后我收到错误“当IDENTITY_INSERT设置为OFF时,无法在表'Prat'中为标识列插入显式值”
这是生成的SQL语句:
INSERT INTO [Prat] ([Id], [Anno], [Pratica], [Variante]) VALUES (@p0, @p1, @p2, @p3);
正如您所见,Id字段已添加到字段列表中,但此字段为Identity!
如果在context.SaveChangesAsync()之前设置了
prat.ID = 0
生成的SQL语句是
INSERT INTO [Prat] ([Anno], [Pratica], [Variante]) VALUES (@p0, @p1, @p2);
一切正常。
谢谢。
答案 0 :(得分:0)
主键属性的类型为int,根据约定,EF Core假定数据库将使用SQL。 IDENTITY命令,用于在添加新行时创建唯一键。因此,您必须将数据库列定义为identity列。
答案 1 :(得分:0)
我认为您需要使用DatabaseGenerated属性配置模型,或使用fluent api
配置模型...
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column("Id")]
public int ID { get; set; }
...