实体框架标识列负值

时间:2016-08-30 15:16:57

标签: postgresql asp.net-core entity-framework-core

我有一个ASP.NET Core 1.0 Web应用程序,它实现了一些REST Web服务,这些服务通过Entity Framework Core与PostgreSQL数据库进行交互。

在我的模型中,我有各种代码优先的实体类,它们使用以下模式:

[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

显然,这对应于数据库中的自动递增唯一键标识列。

问题在于,无疑是由于某些缺陷,偶尔由于我还不了解的原因,Id的值是一个非常大的负整数。

-2147482645

通常情况下,从1开始,它们是表现良好的升序整数值。

可能导致什么原因?

1 个答案:

答案 0 :(得分:0)

事实证明,这个问题与实体上的Update()之前的调用有关,甚至在调用Add()之前就插入了Update()。自然地在非插入实体上调用Add()会导致抛出异常。但随后捕获异常并将其用作实体需要添加的标志似乎不是一种选择,因为这样做始终导致在后续插入时使用负Id值。解决方案涉及使用其他方法检测实体尚不存在,然后正确调用Update()来插入它,而不是使用 private void Button_ClickEventHandler(object sender, MouseButtonEventArgs e) { DataTable table = new DataTable(); table.Columns.Add("Data1"); table.Columns.Add("Data2"); //etc... Add all columns necessary var records = XamDataGridName.Records.Take(10); foreach (var record in records) { var item = ((DataRecord)record).DataItem as DataType; if (item != null) { table.Rows.Add(item.Data1, item.Data2); } } } 作为默认操作。