【发布时间】:2019-02-26 13:35:38
【问题描述】:
我必须增加数据库中的一列,这个增量可以依赖于其他列,例如用户增量,我正在使用 jmeter 同时发送多个请求,我尝试使用锁但不能正常工作,怎么能我冻结了部分方法?
public override DepositoProduto Save(DepositoProduto entity)
{
lock (entity)
{
using (var transaction = Session.BeginTransaction())
{
//here auto increment
entity.Codigo = All().OrderByDescending(x => x.Codigo).Select(x => x.Codigo).First() + 1;
//here commit to the database
transaction.Commit();
}
}
return entity;
}
【问题讨论】:
-
您无法锁定
entity,因为每次调用此方法时它都可能是不同的实例。创建了一个可以锁定的静态类级别变量。 -
这有什么例子吗?
-
我试图创建一个变量私有静态只读对象_lock = new object();添加锁(_lock),但我的所有请求都被冻结,并且不保存
-
您对号码的实际要求是什么?任何要求它们必须顺序和无间隙都会严重限制服务的扩展能力。如果您只需要唯一性,请让数据库使用身份/自动增量/其他方式为您执行此操作。
标签: c# .net asp.net-core concurrency