我在向Linq to SQL中的数据集添加项目时遇到问题。我在其他表中使用完全相同的方法没有问题。我怀疑我知道这个问题但找不到答案(我也怀疑我真正需要的是谷歌的正确搜索词)。请记住,这是一个学习项目(尽管它在商业中使用)
我在下面发布了我的代码和datacontext。我在做的是:
创建视图模型(显示相关位)和一个简单的wpf窗口,允许编辑绑定到类别对象的3个属性。类别来自datacontext。编辑工作正常,但添加没有。如果我在db.submitChanges()调用之前检查GetChangeSet(),则不会添加,编辑或删除。
我怀疑在没有子类别的情况下添加的类别会是一个孤儿,但我似乎无法找到解决方案。
打开窗口的命令代码:
CategoryViewModel vm = new CategoryViewModel();
AddEditCategoryWindow window = new AddEditCategoryWindow(vm);
window.ShowDialog();
ViewModel相关内容:
public class CategoryViewModel : ViewModelBase
{
public Category category { get; set; }
// Constructor used to Edit a Category
public CategoryViewModel(Int16 categoryID)
{
db = new OITaskManagerDataContext();
category = QueryCategory(categoryID);
}
// Constructor used to Add a Category
public CategoryViewModel()
{
db = new OITaskManagerDataContext();
category = new Category();
}
}
保存更改的代码:
// Don't close window unless all controls are validated
if (!vm.IsValid(this)) return;
var changes = vm.db.GetChangeSet(); // DEBUG
try
{
vm.db.SubmitChanges(ConflictMode.ContinueOnConflict);
}
catch (ChangeConflictException)
{
vm.db.ChangeConflicts.ResolveAll(RefreshMode.KeepChanges);
vm.db.SubmitChanges();
}
Xaml(编辑简洁):
<TextBox Text="{Binding category.CatName,
Mode=TwoWay,
ValidatesOnDataErrors=True,
UpdateSourceTrigger=PropertyChanged}" />
<TextBox Text="{Binding category.CatDescription,
ValidatesOnDataErrors=True,
UpdateSourceTrigger=PropertyChanged}" />
<CheckBox IsChecked="{Binding category.CatIsInactive, Mode=TwoWay}" />
Data Context http://img683.imageshack.us/img683/8065/mydatacontext.jpg
更新和回答
JayD得到了以下答案,需要补充:
db.Categories.InsertOnSubmit(category);
我很好奇为什么我需要这个,但之前从未需要它,将新项添加到数据库中。事实证明,db.SubmitChanges()仅将 Changes 提交给现有实体及其依赖项。之前这对我有用的原因是,在以前的所有情况下,我的新实体都有依赖关系已经存在于数据库中。在这种情况下,新的类别是孤儿,直到稍后添加子类别。
答案 0 :(得分:1)
我认为你的怀疑是正确的。如果您在添加新类别时未添加新的SubCategory,我建议您在Dbml中删除该关联。我可能误解了你的问题,但根据我的经验,这与我遇到的问题非常相似。你还能详细说明你看到的错误吗?
答案 1 :(得分:1)
你在做什么
db.Categories.InsertOnSubmit(category);
???