Asp.Net MVC 5-我在数据库中有一个表,该表具有三列:Id(主键),CreateDateTime和DeleteDateTime。
最后插入的项目的DeleteDateTime为null,并且表中有一个项目随时具有空的DeleteDateTime。
这是我的代码(在控制器内部):
//find active row in database
var activeRow = db.TableName.SingleOrDefault(t => !t.DeleteDateTime.HasValue);
//if there is no any active row
if (activeRow == null)
{
db.TableName.Add(new TableName()
{
DeleteDateTime = null,
CreateDateTime = DateTime.Now
});
}
else
{
//deactive selected row
activeRow.DeleteDateTime = DateTime.Now;
//add new row which is active (DeleteDateTime is null)
db.TableName.Add(new TableName()
{
DeleteDateTime = null,
CreateDateTime = DateTime.Now
});
}
db.SaveChanges();
当动作一次获得多个请求时,就会出现问题。在此代码表中,不应有多个具有空DeleteDateTime的项目,但是我同时对许多请求进行了测试,结果如下:
result in database (tow null item with same CreateDateTime)
最佳答案
解决:我通过在“ DeleteDateTime”列中添加唯一索引来解决该问题。(在其他情况下,唯一索引不是解决方案,我们可以从触发器中使用)
[Index("IX_DeleteTime", IsUnique = true)]
public DateTime? DeleteDateTime { get; set; }
关于c# - 对操作的泛洪请求会导致无法预料的行为-ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57264924/