Страницы

Поиск по вопросам

пятница, 5 июля 2019 г.

Не сохраняется добавление записи в БД, EF

Есть банальная табличка
Создана она как локальная база (.mdf) Пишу добавление:
ProjEntities context = new ProjEntities(); context.Tables.Add(new Table { ProductName = "Book", Price = 85 });
context.SaveChanges();
Изменения не добавлялись в базу. Хотя, если сразу за сохранением с контекста выбрать записи в список, то добавленная запись есть.


Ответ

Под локальной базой обчыно подразумевается подключение к SQL Express / SQL Local DB с указанием AttachDBFileName = |DataDirectory|\mydatabase.mdf
|DataDirectory| в случае не-ASP.NET приложения означает "та папка, в которой лежит exe файл". Т.е. это скорее всего не папка проекта, в которой лежат исходники, а папка bin.
Т.е. при указании пути через |DataDirectory| программа работает не с mdf-файлом, добавленным в проект, а с его копией в bin.
Это не является спецификой EF, то же самое происходит и при ручной работе с SQL через ADO.NET.
Поэтому при таком способе подключения обычно проявляются две связанных проблемы.
Проблема 1: изменения, внесенные программой "не видны" в базе данных. Причина: программа работает с копией файла в bin, а разработчик проверяет на наличие изменений оригинал в папке проекта. Решение: исправляется просмотром файла из bin. Проблема 2: изменения, внесенные программой, теряются при перезапуске программы из студии (по F5 / Ctrl + F5). Причина: - mdf файл по умолчанию добавляется проект с Build Action = Content, и настройкой Copy To Output Folder = Always. Это означает, что при перестроении приложения (при повторном его запуске из студии) файл базы из проекта копируется в папку bin, заменяя лежащий там файл, в который были сохранены данные при прошлом запуске. Решение: исправляется сменой значения Copy To Output Folder для mdf-файла в проекте на If Newer.

Комментариев нет:

Отправить комментарий