3

現在のシーケンスを取得して次の値にインクリメントするこのシーケンス生成クエリがあります。しかし、増分は更新されていません。nextvalは、データベースのデフォルト値である1を常に返します。

Entity  | StartVal | Increment | CurVal | NextVal
----------------------------------------------------
INVOICE |   0      |     1     |   0    |   1

nextvalは3、5、7などになります

int nextVal = 0;
using (var db = new MedicStoreDataContext())
{
    DAL.LINQ.Sequence seq = (from sq in db.Sequences
                where sq.Entity == entity
                select sq).SingleOrDefault();

    if (seq != null)
    {
        nextVal = seq.NextVal.HasValue ? seq.NextVal.Value : 0;


        seq.NextVal = nextVal + 2;

        db.SubmitChanges();
    }

}

何かをやり残しましたか?

更新: 回答:主キーを設定し、主キーを含めるようにシーケンスクラスフィールドを更新する必要がありました

4

2 に答える 2

4

通常、これは、テーブルの一意の識別子 (または主キー) が見つからないことが原因です。

データの説明で、テーブルが一意のアイテムを正しく選択したと確信していますか? -一意のキーなどを持っていたにもかかわらず、これを最初に試したとき、C#のテーブルの説明はそれを一意としてマークしなかったため、linqは期待どおりに静かに更新しませんでした。エラーも警告もありませんでした。C# でデータ テーブルを修正したら、すべてうまくいきました。

于 2012-07-04T13:59:42.073 に答える
1

それは正しい振る舞いではありませんか?CurVal が 0 の場合、nextVal が 1 になるとは思いませんか? ここで何かが欠けているかもしれませんが、少し複雑すぎるようです。基本的にやりたいことじゃないの

using (var db = new MedicStoreDataContext())
{
    DAL.LINQ.Sequence seq = (from sq in db.Sequences
                where sq.Entity == entity
                select sq).SingleOrDefault();

    if (seq != null)
    {
        seq.CurVal += seq.Increment;

        db.SubmitChanges();
    }
}

nextVal ビット全体が必要な理由がまったくわかりません。私が間違っている場合は、お気軽に修正してください。

于 2012-07-04T14:10:01.043 に答える