我有一个ASP.NET Core 1.0 Web应用程序,它实现了一些REST Web服务,这些服务通过Entity Framework Core与PostgreSQL数据库进行交互。
在我的模型中,我有各种代码优先的实体类,它们使用以下模式:
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
显然,这对应于数据库中的自动递增唯一键标识列。
问题在于,无疑是由于某些缺陷,偶尔由于我还不了解的原因,Id的值是一个非常大的负整数。
-2147482645
通常情况下,从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);
}
}
}
作为默认操作。