首页 > 解决方案 > 在实体框架中,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 版本一起使用。

标签: c#entity-framework-6

解决方案


正如@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;
}

您可能希望使用锁定语句来防止不同的线程增加值


推荐阅读