Невозможно добавить элемент в набор данных в Linq to SQL - PullRequest
1 голос
/ 15 марта 2010

У меня проблема с добавлением элемента в мой набор данных в Linq to SQL. Я использую точно такой же метод в других таблицах без проблем. Я подозреваю, что знаю проблему, но не могу найти ответ (я также подозреваю, что все, что мне действительно нужно, это правильный поисковый запрос для Google). Пожалуйста, имейте в виду, что это учебный проект (хотя он используется в бизнесе)

Я разместил свой код и текстовые данные ниже. Что я делаю, это:

Создание модели представления (показаны соответствующие биты) и простого окна wpf, которое позволяет редактировать 3 свойства, которые привязаны к объекту категории. Категория из текста данных. Редактировать работает нормально, но добавить - нет. Если я проверяю GetChangeSet () непосредственно перед вызовом db.submitChanges (), в нем нет ни добавления, ни редактирования, ни удаления.

Я подозреваю, что проблема в том, что категория, добавленная без подкатегории, будет сиротой, но я не могу найти решение.

Код команды для открытия окна:

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

  • IssCategory в таблице вопросов - это старая текстовая категория. Это поле больше не используется и будет удалено из базы данных, как только оно заработает, и будет запущено.

Обновление и ответ

У JayD был ответ ниже с необходимостью добавить:

db.Categories.InsertOnSubmit(category); 

Мне было любопытно, зачем мне это здесь нужно, но раньше оно никогда не было нужно, чтобы добавлять новые элементы в базу данных. Оказывается, db.SubmitChanges () отправляет только Changes существующим объектам и их зависимостям. Причина, по которой это работало для меня раньше, заключалась в том, что во всех предыдущих случаях мои новые сущности имели зависимости, которые уже сохранялись в базе данных. В этом случае новая категория является сиротой, пока подкатегория не будет добавлена ​​позже.

Ответы [ 2 ]

1 голос
/ 16 марта 2010

Вы делаете

db.Categories.InsertOnSubmit(category);

???

1 голос
/ 15 марта 2010

Я думаю, что ваше подозрение верно.Если вы не добавляете новую подкатегорию при добавлении новой категории, я бы посоветовал вам удалить эту связь в вашем Dbml.Возможно, я неправильно понял ваш вопрос, но, исходя из моего опыта, это очень похоже на проблему, с которой я столкнулся.Также можете ли вы рассказать об ошибке, которую вы видите?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...