Страницы

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

вторник, 25 февраля 2020 г.

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

#c_sharp #entity_framework


Есть банальная табличка


Создана она как локальная база (.mdf)
Пишу добавление:  

ProjEntities context = new ProjEntities();
context.Tables.Add(new Table
{
    ProductName = "Book",
    Price = 85
});

context.SaveChanges();


Изменения не добавлялись в базу. Хотя, если сразу за сохранением с контекста выбрать
записи в список, то добавленная запись есть.  
    


Ответы

Ответ 1



Под локальной базой обчыно подразумевается подключение к 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.

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

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