在Entity Framework中,id值不会增加1,而是增加1000?

时间:2019-03-09 06:06:25

标签: c# entity-framework-6

在下表中,您可以看到billid列在第10行增加了1000。

enter image description here

生成新的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版一起使用。

1 个答案:

答案 0 :(得分:0)

这可能是由于各种原因所致,如@CodingYoshi指出的here所述。为避免此类不幸,您可以选择生成最后一个BillId,并通过将最后一个BillId乘以1进行放大,从而生成几乎可以确定是连续的BillId。

您可以编写如下功能

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;
}

您可能想使用lock statement来防止不同的线程递增值