【发布时间】:2010-03-15 18:22:32
【问题描述】:
我在 Linq to SQL 中向我的数据集添加项目时遇到问题。我在其他表中使用完全相同的方法没有问题。我怀疑我知道这个问题但找不到答案(我也怀疑我真正需要的只是谷歌的正确搜索词)。请记住,这是一个学习项目(虽然它正在商业中使用)
我在下面发布了我的代码和数据上下文。我正在做的是:
创建一个视图模型(显示相关位)和一个简单的 wpf 窗口,该窗口允许编辑绑定到类别对象的 3 个属性。类别来自数据上下文。编辑工作正常,但添加没有。如果我在 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}" />
- 问题表中的 IssCategory 是旧的基于文本的类别。该字段不再使用,一旦生效并上线,就会从数据库中删除。
更新和回答
JayD 得到了下面的答案,需要补充:
db.Categories.InsertOnSubmit(category);
我很好奇为什么我在这里需要它,但以前从未需要它来向数据库添加新项目。事实证明 db.SubmitChanges() 仅将 Changes 提交给现有实体及其依赖项。以前这对我有用的原因是,在所有先前的情况下,我的新实体的依赖项已经持久存在于数据库中。在这种情况下,新类别是孤立的,直到稍后添加子类别。
【问题讨论】:
标签: c# wpf linq linq-to-sql