Context.SubmitChanges()没有更新,尽管有一个PK



我在c#中linq到DB实现提供的SubmitChanges函数有问题。当我运行该命令时,不会抛出任何错误,但记录永远不会更新。我已经查了这个问题,几乎每个人都说这是在问题与表没有主键。然而,我的表有一个主键分配给它,但SubmitChanges没有发生。为了让您大致了解我正在执行的操作,下面是一个示例:

public void setApproval(string approvalCode, int ID)
{
    using (DatabaseDataContext context = new DatabaseDataContext(DBConnection().getConnectionString()))
    {
        myRecord con = getRecord(ID); //Gets the record succesfully, PK field in tact
        con.ApprovalStatus = approvalCode;
        context.SubmitChanges();
    }
}

如上所述,记录被成功获取,包含所有数据,包括用于识别它的PK字段。数据库连接用户被赋予了更新表的权利,尽管在这里我希望它中断并抱怨。

任何想法?如果我提供的信息不够,请告诉我。任何帮助都非常感谢!

应该通过context获取对象

public void setApproval(string approvalCode, int ID)
{
    using (DatabaseDataContext context = new DatabaseDataContext(DBConnection().getConnectionString()))
    {
        myRecord con = context.TableName.First(item => item.ID == ID); //Gets the record succesfully, PK field in tact
        con.ApprovalStatus = approvalCode;
        context.SubmitChanges();
    }
}

当你通过Context获取对象时,它会记录你所做的更改然后将这些更改保存在SubmitChanges

getRecord(ID)在哪里得到它的上下文返回一个记录?它没有被传递给方法,所以我假设它使用了不同的上下文。SubmitChanges()将只看到当前上下文的更改,而不是getRecord(ID)使用的上下文。

您是否检查是否使用代码或独立的DB工具更新了数据?

如果在代码中,你的读代码和写代码一样可疑:当两个没有通用API的应用程序通过数据库进行通信时,我遇到了类似的问题。上下文并不是DB中当前内容的反映,并且告诉它刷新的数量不会完全解决问题。如果需要检查数据库中是否有其他程序或线程输入的内容,则必须创建一个新的数据库上下文对象来检查数据库。旧的数据库上下文对象可能仍然包含最近一次更新之前的旧数据。

您的getRecord函数需要创建一个新的上下文或将您刚刚编辑的当前上下文作为参数。如果它使用静态或类级上下文,它将没有最新的数据。

最新更新