SubmitChanges没有更新

时间:2014-03-23 16:07:34

标签: c# entity-framework submitchanges

首先,我想确切地说,我阅读了有关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();
    }
}

我尝试删除复合主键,只添加一个&#34; id&#34;键,但表格无论如何都没有更新。我发现让它工作的唯一方法是删除旧行并添加一个带有新值的新行,但这显然很糟糕。

当我尝试在其中添加一些断点时,我收到此错误消息,该消息在正常模式下无法显示:

  

在调用SubmitChanges期间无法执行操作。

修改

似乎问题是由SQL异常引起的。 这是例外跟踪跟踪:

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)

1 个答案:

答案 0 :(得分:0)

您没有进行任何更改。这行代码只会为您的本地变量DBtraining分配一个新值:

DBtraining = training;

您可能想要做的是:

DBtraining.Value = training.Value

这将更新数据库中当前实例的Value。当您致电SubmitChanges时,会保存此内容。