ID#在ASP.NET中重置

时间:2015-06-29 15:52:31

标签: asp.net-mvc vb.net

在我的控制器操作中,我试图从数据库中检索记录:

            Dim surveyDB = db.Surveys.Find(sid)

sid 在Class级别实例化:

    Private sid As New Integer

当我第一次创建一个新的Survey(如果surveyDB没有)时,我将它添加到数据库并设置 sid ,如下所示:

                db.Surveys.Add(survey)
                Await db.SaveChangesAsync()
                sid = survey.SurveyID

这似乎还不错(比如新的调查进入第20行所以调查.SurveyID = 20),除非我回到那个页面, sid 因某些原因而被重置所以surveyDB总是没有。

为什么在ASP.NET中类级变量会被重置?如何才能正确找到我正在寻找的记录?

2 个答案:

答案 0 :(得分:0)

  

之后的代码是依赖于上述行结果的IF:

当你有await时,这实际上应该是自动的(据我所知),当一个表达式试图使用它应该挂起的值,直到await结束。在尝试类似下面的解决方案之前,这一点非常重要。

否则...

一种选择是等待它完成(或任何数目完成):

Dim surveyDB = db.Surveys.FindAsync(sid)

Task.WhenAll(surveyDB)

If IsNothing(surveyDB.Result) Then
  //...
Else
  //...
End If

这将允许您添加任意数量的异步调用:

Dim surveyDB = db.Surveys.FindAsync(sid)
Dim surveyDB1 = db.Surveys.FindAsync(sid1)
Dim surveyDB2 = db.Surveys.FindAsync(sid2)

Task.WhenAll(surveyDB, surveyDB1, survyeDB2)

If IsNothing(surveyDB.Result) Then
  //...
Else
  //...
End If

答案 1 :(得分:0)

我通过使用Session变量而不是Class变量并首先检查它的值来解决这个问题,如果它不存在则使用实体状态更新行:

            If Session("sid") Is Nothing Then
                db.Surveys.Add(survey)
                Await db.SaveChangesAsync()
                Session("sid") = survey.SurveyID
            Else
                db.Entry(survey).State = EntityState.Modified
                Await db.SaveChangesAsync()
            End If