c# - 在实体框架中,id 值不会增加 1,而是增加 1000?
问题描述
在下表中,您可以看到该billid
列在第 10 行增加了 1000。
生成new的代码bill
如下:
private void NewBill()
{
var bill = new Bill
{
BillDate = DateTime.Now,
InUse = true,
Paid = false,
TableId = _tableId,
UserId = frmLogIn.LoggedInUserId
};
using (var context = new Context())
{
context.Bills.Add(bill);
context.SaveChanges();
}
}
为什么它不会只增加 1 ?
我将 EF6 与 SQL Server 2017 Express 版本一起使用。
解决方案
正如@CodingYoshi所指出的,这可能是由于各种原因造成的。为避免此类事故,您可以选择生成 BillId,通过获取最后一个 BillId 并将其递增 1,您几乎可以确定它是连续的。
您可以编写如下函数
public int NextId()
{
int lastId = 0;
var billsFromStore = _context.Bills;
if (billsFromStore.Any())
{
var idsFromStore = _context.Bills.Select(x => x.BillId);
lastId = idsFromStore.Max();
}
return ++lastId;
}
您可能希望使用锁定语句来防止不同的线程增加值
推荐阅读
- c# - 如何在文件名上传到asp.net之前检查文件名
- php - 大上传图片文件大小
- html - Xpath - 如何在内部获得跨度( div/div[3]/div[1]/span)
- graphql - 如何为 GraphQLString 类型创建别名?
- c# - 错误 CS0121:编译时自动映射器出现问题
- python - 如何修复 Python 3.7 中“scipy.misc”中“bytescale”的导入错误?
- reactjs - 将类添加到正确的选项
- spring - Spring Boot多对多post方法不更新数据
- python - objects.create(...) 不创建对象
- java - 使用 jlinked java 启动器启用预览功能