4

C#でのlinqtoDB実装によって提供される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

データがコードで更新されたか、独立したDBツールで更新されたかを確認していますか?

コード内の場合、読み取りコードは書き込みコードと同じくらい疑わしいです。共通のAPIを持たない2つのアプリケーションがデータベースを介して通信しているときに、同様の問題が発生していました。コンテキストは現在DBにあるものを反映しておらず、更新するように指示しても問題を完全に修正することはできません。別のプログラムまたはスレッドによって入力されたものがないかデータベースを検査する必要がある場合は、データベースを検査するための新しいデータベースコンテキストオブジェクトを作成する必要があります。古いデータベースコンテキストオブジェクトには、最新の更新前の古いデータが残っている可能性があります。

関数getRecordは、新しいコンテキストを作成するか、編集したばかりの現在のコンテキストをパラメーターとして取得する必要があります。静的またはクラスレベルのコンテキストを使用する場合、最新のデータはありません。

于 2013-03-18T18:38:17.783 に答える