C# “提交更改”而不是“提交更改”;“提交”;在LINQ到SQL中
我正在使用WPF、MVVM和LINQtoSQL创建一个应用程序。我有一个关于类型为Calculation的对象的注释集。因此,我为此创建了一个名为vmCalculation的ViewModel类。我的问题是,当我尝试向该对象添加注释并提交更改时,“注释”不会提交到数据库 计算内容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
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();
}
}