У меня есть две таблицы в моей базе данных, связанные внешними ключами: Page (PageId, другие данные) и PageTag (PageId, Tag). Я использовал LINQ для генерации классов для этих таблиц, со страницей в качестве родителя и тегом в качестве дочерней коллекции (отношение один ко многим). Есть ли способ пометить записи PageTag для удаления из базы данных из класса Page?
Быстрая очистка:
Я хочу, чтобы дочерние объекты были удалены, когда родительский DataContext вызывает метод SubmitChanges (), а не раньше. Я хочу, чтобы TagString вел себя точно так же, как и любые другие свойства объекта Page.
Я хотел бы включить код, подобный следующему:
Page page = mDataContext.Pages.Where(page => page.pageId = 1);
page.TagString = "new set of tags";
//Changes have not been written to the database at this point.
mDataContext.SubmitChanges();
//All changes should now be saved to the database.
Вот моя ситуация в деталях:
Чтобы упростить работу с коллекцией тегов, я добавил в объект Page свойство, которое обрабатывает коллекцию тегов как строку:
public string TagString {
get {
StringBuilder output = new StringBuilder();
foreach (PageTag tag in PageTags) {
output.Append(tag.Tag + " ");
}
if (output.Length > 0) {
output.Remove(output.Length - 1, 1);
}
return output.ToString();
}
set {
string[] tags = value.Split(' ');
PageTags.Clear();
foreach (string tag in tags) {
PageTag pageTag = new PageTag();
pageTag.Tag = tag;
PageTags.Add(pageTag);
}
}
}
По сути, идея заключается в том, что когда в это свойство отправляется строка тегов, текущие теги объекта удаляются и на их месте создается новый набор.
Проблема, с которой я сталкиваюсь, заключается в том, что эта строка:
PageTags.Clear();
Фактически не удаляет старые теги из базы данных при отправке изменений.
Оглядываясь вокруг, можно сказать, что "правильный" способ удаления объектов заключается в вызове метода DeleteOnSubmit класса контекста данных. Но у меня, похоже, нет доступа к классу DataContext из класса Page.
Кто-нибудь знает способ пометить дочерние элементы для удаления из базы данных из класса Page?