【发布时间】:2015-04-05 14:40:12
【问题描述】:
当我更改 OnlinePayment 时,我想为记录创建一个唯一的 InvoiceNumber。此代码将生成一个唯一的 id:
int newId = db.OnlinePayments.Max(op => op.InvoiceNumber) + 1;
但是,如果同时添加另一条记录,这将失败。使用Identity 列不是一个选项,因为每当我更改数据库时InvoiceNumber 都应该更改。下面的代码能保证生成的InvoiceNumber 的唯一性吗?
using (var transaction = db.Database.BeginTransaction())
{
try
{
int newId = db.OnlinePayments.Max(op => op.InvoiceNumber) + 1;
opi.InvoiceNumber = newId;
await db.SaveChangesAsync();
transaction.Commit();
}
catch
{
transaction.Rollback();
}
}
【问题讨论】:
-
有点不清楚....
GUID?Random Number Generator (RNG)?想到... -
为什么不使用
InvoiceNumber作为标识列? -
@ArindamNayak 我相信我在上面回答了你的问题。
-
@AlirezaNoori 我真的不明白你的推理,你所说的“因为 InvoiceNumber 应该在我更改数据库时更改”是什么意思?
-
如果我将列设置为
Identity,当我无法手动更改值并且我希望每次修改记录时都更改它。假设有一条记录包含1的Id和10的InvoiceNumber。现在,当我更改此记录时,InvoiceNumber应该更改为11。Identity不允许这样做。至少我不知道怎么做。
标签: asp.net asp.net-mvc entity-framework entity-framework-6