我过去通过向您希望执行并发检查的表添加时间戳字段来完成此操作。 (在我的示例中,我添加了一个名为 ConcurrencyCheck 的列)
这里有两种并发模式,具体取决于您的需要:
1 并发模式:固定:
然后在模型中重新添加/刷新表。为了固定并发,确保将表导入模型时将并发模式设置为固定:如下所示:
然后捕获这个:
try
{
context.SaveChanges();
}
catch (OptimisticConcurrencyException ex) {
////handle your exception here...
2.并发模式:无
如果您希望处理自己的并发检查,即引发通知用户的验证,甚至不允许进行保存,那么您可以将并发模式设置为“无”。
1.确保您更改了并发模式在您刚刚添加的新列的属性中"None".2. 要在您的代码中使用它,我将创建一个变量来存储您要检查保存的屏幕上的当前时间戳。
private byte[] CurrentRecordTimestamp
{
get
{
return (byte[])Session["currentRecordTimestamp"];
}
set
{
Session["currentRecordTimestamp"] = value;
}
}
1.在页面加载时(假设您使用的是asp.net而不是上面没有提到的mvc/razor),或者当您使用您希望编辑的数据填充屏幕时,我会在编辑的ConcurrencyCheck值下提取当前记录到您创建的这个变量中。
this.CurrentRecordTimestamp = currentAccount.ConcurrencyCheck;
然后,如果用户保持记录打开,而其他人同时更改它,然后他们也尝试保存,您可以将之前保存的时间戳值与现在的并发值进行比较。
if (Convert.ToBase64String(accountDetails.ConcurrencyCheck) != Convert.ToBase64String(this.CurrentRecordTimestamp))
{
}