4

我对 C# 中的 linq to 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 字段。数据库连接用户被授予更新表的权限,尽管在这里我希望它会中断并抱怨。

有任何想法吗?如果我没有提供足够的信息,请告诉我。任何帮助是极大的赞赏!

4

3 回答 3

5

您应该通过上下文获取对象

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

于 2013-03-18T18:16:36.917 回答
4

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

于 2013-03-18T18:14:22.583 回答
0

您是在检查数据是使用代码还是使用独立的数据库工具更新的?

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

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

于 2013-03-18T18:38:17.783 回答