#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.
Комментариев нет:
Отправить комментарий