0

まず、SubmitChanges の問題に関するすべての関連項目を読みましたが、問題を解決するものを見つけることができなかったことを正確に伝えたいと思います...同じ方法を使用して完全に正常に動作しているいくつかのテーブルがあります (複合主キーを除く) が、これはそうではありません。理由がわかりません。ここに表があります:

CREATE TABLE [dbo].[Trainings] (
    [playerId] INT NOT NULL,
    [stepId]  INT NOT NULL,
    [value]   INT NOT NULL,
    CONSTRAINT [PK_Trainings] PRIMARY KEY CLUSTERED ([playerId] ASC, [stepId] ASC)
);

関連するクラス:

[Table(Name = "Trainings")]
public class Training
{
    [Column(IsPrimaryKey = true)] public int PlayerID { get; set; }
    [Column(IsPrimaryKey = true, Name = "stepId")] public int Step { get; set; }
    [Column] public int Value { get; set; }

    public Training(int playerId, int step, int value)
    {
        PlayerID = playerId;
        Step = step;
        Value = value;
    }
}

そしてデータベース更新呼び出し:

public class Database : DataContext
{
    public Table<Training> Trainings;

    public Training GetTraining(int playerId, int step)
    {
        Training training = Trainings.Where(t => t.PlayerID == playerId && t.Step == step).Single();
        return training;
    }

    public void UpdateTraining(Training training)
    {
        Training DBtraining = GetTraining(training.PlayerID, training.Step);
        DBtraining = training;
        SubmitChanges();
    }
}

複合主キーを削除して「id」キーのみを追加しようとしましたが、テーブルは更新されません。私が見つけた唯一の方法は、古い行を削除し、新しい値で新しい行を追加することですが、明らかにひどいものです。

ブレークポイントを入れようとすると、通常モードでは表示されない次のエラーメッセージが表示されました。

SubmitChanges の呼び出し中は操作を実行できません。

編集:

問題は SQL 例外が原因のようです。例外 tracktrace は次のとおりです。

System.Exception.StackTrace.get
System.Data.Linq.DataContext.CheckNotInSubmitChanges()
System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
System.Data.Linq.DataContext.SubmitChanges()
Database.UpdateTraining(Training training)
4

1 に答える 1

0

変更を加えていません。このコード行は、ローカル変数DBtrainingに新しい値を割り当てるだけです:

DBtraining = training;

おそらくやりたいことはこれです:

DBtraining.Value = training.Value

Valueこれにより、データベース内の現在のインスタンスが更新されます。これは、 を呼び出したときに保存されますSubmitChanges

于 2014-03-23T16:31:11.230 に答える