Есть банальная табличка
Создана она как локальная база (.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.
Комментариев нет:
Отправить комментарий