У меня проблема с добавлением элемента в мой набор данных в 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}" />
- IssCategory в таблице вопросов - это старая текстовая категория. Это поле больше не используется и будет удалено из базы данных, как только оно заработает, и будет запущено.
Обновление и ответ
У JayD был ответ ниже с необходимостью добавить:
db.Categories.InsertOnSubmit(category);
Мне было любопытно, зачем мне это здесь нужно, но раньше оно никогда не было нужно, чтобы добавлять новые элементы в базу данных. Оказывается, db.SubmitChanges () отправляет только Changes существующим объектам и их зависимостям. Причина, по которой это работало для меня раньше, заключалась в том, что во всех предыдущих случаях мои новые сущности имели зависимости, которые уже сохранялись в базе данных. В этом случае новая категория является сиротой, пока подкатегория не будет добавлена позже.