无法将项目添加到Linq to SQL中的数据集

时间:2010-03-15 18:22:32

标签: c# wpf linq linq-to-sql

我在向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

    问题表中的
  • IssCategory是旧的基于文本的类别。该字段不再使用,只要该字段正常工作并将其推送,就会从数据库中删除。

更新和回答

JayD得到了以下答案,需要补充:

db.Categories.InsertOnSubmit(category); 

我很好奇为什么我需要这个,但之前从未需要它,将新项添加到数据库中。事实证明,db.SubmitChanges()仅将 Changes 提交给现有实体及其依赖项。之前这对我有用的原因是,在以前的所有情况下,我的新实体都有依赖关系已经存在于数据库中。在这种情况下,新的类别是孤儿,直到稍后添加子类别。

2 个答案:

答案 0 :(得分:1)

我认为你的怀疑是正确的。如果您在添加新类别时未添加新的SubCategory,我建议您在Dbml中删除该关联。我可能误解了你的问题,但根据我的经验,这与我遇到的问题非常相似。你还能详细说明你看到的错误吗?

答案 1 :(得分:1)

你在做什么

db.Categories.InsertOnSubmit(category);

???