C# “提交更改”而不是“提交更改”;“提交”;在LINQ到SQL中

C# “提交更改”而不是“提交更改”;“提交”;在LINQ到SQL中,c#,linq-to-sql,data-binding,C#,Linq To Sql,Data Binding,我正在使用WPF、MVVM和LINQtoSQL创建一个应用程序。我有一个关于类型为Calculation的对象的注释集。因此,我为此创建了一个名为vmCalculation的ViewModel类。我的问题是,当我尝试向该对象添加注释并提交更改时,“注释”不会提交到数据库 计算内容 public class vmCalculation : vmBase { Calculation calc; public ObservableCollection<Note> Note

我正在使用WPF、MVVM和LINQtoSQL创建一个应用程序。我有一个关于类型为Calculation的对象的注释集。因此,我为此创建了一个名为vmCalculation的ViewModel类。我的问题是,当我尝试向该对象添加注释并提交更改时,“注释”不会提交到数据库

计算内容

public class vmCalculation : vmBase
{
    Calculation calc;

    public ObservableCollection<Note> Notes { get; private set; }

    public vmCalculation(Calculation calc)
    {
        this.calc = calc;
        Notes = new ObservableCollection<Note>();
        foreach (var n in calc.Notes) Notes.Add(n);
    }

    public void AddNote()
    {
        Notes.Add(new Note
        {
            NoteText = "New note",
            NoteType = 1
        });
    }

    internal void Save()
    {
        foreach (var n in Notes.Where(n => n.NoteId == 0))
            calc.Notes.Add(n);
    }
}
CurrentCalc是一个属性,用于获取/设置我在数据绑定(将DataGrid绑定到CurrentCalc.Notes)中使用的vmCalculation

当我在CurrentCalc上运行AddNote()时,视图会更新为“New note”-note。但是,当我运行SaveChanges()时,注释不会写入数据库

对这个问题有什么想法吗


问题的一个可能原因是,我没有在vmNotes中初始化DataContext(DC)。我从另一个ViewModel获取DataContext,这样就不会破坏MVVM结构。

在提交之前,必须将新实体添加到DataContext中。 例如:


为我的问题想出了一个可能的解决办法

我稍微更新了vmNotes类上的SaveChanges()-方法

public void SaveChanges()
    {
        var newNotes = currentCalc.Notes.Where(n => n.NoteId == 0);
        DC.Notes.InsertAllOnSubmit(newNotes);
        DC.SubmitChanges();
    }
}
2011年9月3日更新:

无论如何,不需要上面的代码

我发现我的DataModel类有多个(静态)实例


我删掉了其中一些,现在我的原始代码工作得很好

计算是您的DataContext吗?我的LINQ到SQL DataContext(DC)是在vmNotes有权访问的ViewModel vmMain中定义的。计算是笔记所属的对象。我已经想到了。但它不会破坏MVVM体系结构吗?我的意思是,vmCalculation没有访问“DC”的权限。我想我实际上已经试过了,但是出了一个错误。如果没有计算,便笺不可能存在,因此不能直接添加到DC.Notes中。不过,我会再次尝试这种方法。
DC.Notes.InsertOnSubmit(NewNote);
DC.SubmitChanges();
public void SaveChanges()
    {
        var newNotes = currentCalc.Notes.Where(n => n.NoteId == 0);
        DC.Notes.InsertAllOnSubmit(newNotes);
        DC.SubmitChanges();
    }
}