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/

10-09 00:19