У меня есть приложение ASP.NET MVC (с использованием кандидата на выпуск), которое работает с библиотекой классов, которая, среди прочего, использует LINQ to SQL для сохранения данных.
Одной из вещей, которую поддерживает app / db, является концепция «Папка» - как папка на диске, но с иерархией, которая существует только в базе данных. Другие объекты базы данных находятся в этих папках, если смотреть с точки зрения пользователя.
Каждый класс в библиотеке классов имеет собственную статическую ссылку на мой объект DataContext. Кроме того, каждый контроллер MVC имеет свой собственный объект DataContext.
У меня есть два Действия, возвращающие данные JSON. Одним из них является «GetFoldersJSON», который возвращает структуру папок в формате, подходящем для списка выбора (раскрывающегося списка). Другой - «AddFolderJSON», который принимает некоторые данные формы, вставляет новую папку в базу данных, а затем возвращает GetFoldersJSON () для отправки нового списка папок клиенту. Клиент использует AJAX с этими действиями для обновления выпадающих списков после создания новой папки.
Ход этой операции таков:
Действие AddFolderJSON () - получение информации формы с новым именем папки, родительской папкой и т. Д.
Создать новый объект папки.
Выполните dataContext.Folders.InsertOnSubmit (newFolder);
Выполните dataContext.SubmitChanges ();
Выполните dataContext.Refresh (OverwriteThingy, dataContext.Folders);
возвращаемый результат GetFoldersJSON ()
GetFoldersJSON () использует функцию, которая находится в определении папки - это частичный класс, расширяющий объект папки, отображаемый в OR. Эта функция рекурсивно добавляет папки и подпапки в плоский список, используя такой код:
var rootFolders = from f in db.Folders
where f.ParentFolder == null
orderby f.name
select f;
db - это, конечно, локальная статическая ссылка на DataContext.
Тогда простой цикл:
foreach (var fldr in rootFolders)
{
AddFolderContents(list, fldr);
}
Функция AddFolderContents () затем добавляет текущую папку в список и продолжает вызывать себя для каждой подпапки текущей папки, создавая таким образом иерархию.
Это прекрасно работает для данных, уже находящихся в базе данных, но когда мы запускаем эту процедуру после создания новой папки, новая папка не отображается. Если мы обновим страницу, она все равно не появится. На самом деле он не отображается, пока приложение не будет перезапущено.
Я пытался делать вызовы Refresh () практически везде, и, похоже, в этом случае он не действует.
Есть ли способ сказать LINQ to SQL: «Эй, я знаю, о чем ты думаешь, но брось все и просто получи все данные из базы данных, сейчас!»?
У меня есть ноющее чувство, я слышал об этом раньше, но не смог найти его описанным здесь.