ef升至ef6后,savechangs提示“未将对象的引用设置到对象的实例”

最近尝试将aps.net网站项目转换成asp.net应用程序,发现ef需升级到ef6。
遂删掉原先的edmx文件,重新生成edmx文件,再将addobject、deleteobject替换为add、remove。
查询、删除没问题,就是新增、修改,保存时出错:

System.NullReferenceException
HResult=0x80004003
Message=未将对象引用设置到对象的实例。
Source=<无法计算异常源>
StackTrace:
<无法计算异常堆栈跟踪>

修改的代码如下:

        Dim db As New payEntities
        Dim product As bs_Users = db.bs_Users.Where(Function(n) n.UserID = uid).FirstOrDefault()
        product.LastLoginTime = Date.Now
        db.SaveChanges()

查看上述代码中的product,发现有多个异常提示,如:

IsValid = “product.IsValid”引发了类型“System.Web.HttpException”的异常
CodePage = “product.CodePage”引发了类型“System.Web.HttpException”的异常

上述代码在之前ObjectContext模式下正常运行。

我又发现另一个地方的修改保存是成功的,代码如下:

  Dim product = db.b_BUDGET.Where(Function(n) n.version_id = id And n.budget_item_id = item)
        For Each p In product
            p.amount = CType(ht.Item(p.period), Decimal)
        Next

        db.SaveChanges()

为什么代码一失败,而代码二成功呢?希望不吝解惑,谢谢。

你这边也提到了有异常信息是空引用异常了,那你就需要考虑验证能否从DB里查到这些数据。在你的第一部分代码中,建议先验证一下 db.bs_Users.Where(Function(n) n.UserID = uid) 这个查询出来的是否有记录。

我发现,把另外一个用户管理的页面(bs_Users.aspx)排除项目外,登陆页面即代码一(Login.aspx)就正常了。
但我想不明白,这两个独立的page为啥会影响?