【问题标题】:Unable to add item to dataset in Linq to SQL无法将项目添加到 Linq to SQL 中的数据集
【发布时间】: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


    【解决方案1】:

    你在做吗

    db.Categories.InsertOnSubmit(category);
    

    ???

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我根本看不到任何错误。我最初的想法是,在添加与之关联的子类别之前,我需要先获得一个类别。也许我想错了,因为所有子类别只能属于一个类别,所以在子类别级别上建立关联然后使用问题表上的子类别外键将 hte 类别自行关闭对我来说是有意义的。
      猜你喜欢
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多