С# 2 версии одного и того же файла MDF

У меня есть файл MDF, который я использую в качестве БД и подключаюсь к нему с помощью Linq-to-SQL.

моя строка подключения:

<add name="TasteTeam.Properties.Settings.TasteDBConnectionString" connectionString="Data Source=(LocalDB)\v11.0; AttachDbFilename=|DataDirectory|\TasteDB.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />

моя проблема в том, что когда я запускаю программу и добавляю данные в таблицу, она добавляет в файл MDF который находится в папке bin вместо основного файла MDF.

эта ситуация приводит к тому, что файл MDF становится пустым каждый раз, когда я перезапускаю свою программу вместо сохранения данных.

что я могу сделать, чтобы и MDF, и файл MDF tmp в корзине были одним и тем же файлом (я уже пробовал все варианты «копировать в выходной каталог», но ничего не помогает)


person Jynxed    schedule 21.05.2016    source источник
comment
stackoverflow.com /вопросы/17147249/.   -  person Steve    schedule 21.05.2016
comment
@ Стив, я посмотрел на ваш ответ, и он действительно очень полезен, но не могли бы вы объяснить пару вещей, которые были недостаточно ясны для меня? 1. создав 2 строки подключения, как я могу сохранить оба файла MDF постоянными? 2. есть ли способ выбрать только 1 файл mdf для работы (я предпочитаю не тот, который находится в папке BIN, потому что он каждый раз удаляется)   -  person Jynxed    schedule 21.05.2016
comment
Измените свойство Copy To OutputDirectory на Copy Newer. Это заблокирует копирование Visual Studio из папки проекта в рабочую папку. В противном случае используйте предложенное решение от marc_s ниже. Вот как работает DataDirectory   -  person Steve    schedule 21.05.2016


Ответы (1)


Весь подход AttachDbFileName= ошибочен - в лучшем случае! При запуске вашего приложения в Visual Studio оно будет копировать файл .mdf (из вашего каталога App_Data в выходной каталог — обычно .\bin\debug — где работает ваше приложение) и скорее всего, ваш INSERT работает просто отлично - но вы просто смотрите на неправильный файл .mdf в конце!

Если вы хотите придерживаться этого подхода, попробуйте поставить точку останова на вызове myConnection.Close(), а затем проверьте файл .mdf с помощью SQL Server Mgmt Studio Express — я почти уверен, что ваши данные там.

На мой взгляд, настоящим решением было бы

  1. установить SQL Server Express (и вы все равно это уже сделали)

  2. установить SQL Server Management Studio Express

  3. создайте свою базу данных в SSMS Express, дайте ей логическое имя (например, TasteDB)

  4. подключитесь к ней, используя ее логическое имя базы данных (данное при ее создании на сервере) — и не возитесь с физическими файлами базы данных и экземплярами пользователей. В этом случае ваша строка подключения будет выглядеть примерно так:

    Data Source=.\\SQLEXPRESS;Database=TasteDB;Integrated Security=True
    

    а все остальное точно так же, как и раньше...

Также см. отличный пост Аарона Бертрана в блоге От вредных привычек: использование AttachDbFileName. справочная информация.

person marc_s    schedule 21.05.2016
comment
Спасибо за ответ. что, если мне придется работать с подходом AttachDbFileName, но при этом я хочу, чтобы мои данные отображались в основном файле MDF? мои вставки работают отлично, но, как вы упомянули, они добавляются в другой файл mdf, и как только я перестраиваю проект, мои данные исчезают (поскольку временный файл mdf в папке bin исчез) - person Jynxed; 21.05.2016