2016-12-30 4 views
1

Я хочу использовать EF-Migrations и, следовательно, должен использовать Update-Database. Поскольку я использую несколько .mdf-файлов в основной папке проекта, которые также должны использоваться во время отладки, у меня есть несколько ConnectionStrings в App.config Я использую с EF.Updata-Database -ConnectionStringName с измененным | DataDirectory |

Образец ConnectionString:

<add name="DataContext" 
     providerName="System.Data.SqlClient" 
     connectionString="Data Source=(LocalDB)\mssqllocaldb;Database=Database;Integrated Security=True;AttachDbFilename=|DataDirectory|\Database.mdf"/> 

Поскольку при отладке |DataDirectory| является Project-Root\bin\Debug Я написал функцию, которая меняет |DataDirectory| к Project-Root\app_data:

 #if DEBUG 
     string path = Directory.GetParent(Environment.CurrentDirectory).Parent?.FullName + "\\app_data"; 
     AppDomain.CurrentDomain.SetData("DataDirectory", path); 
     #endif 

Проблема заключается в том, что |DataDirectory| не обновляется, когда я звоню Update-Database и поэтому не может найти .mdf-файл.

Я нашел very similar question без ответов/решений, но, похоже, это не привлекло большого внимания.

Итак, есть ли чистый способ справиться с этим или лучше сделать это в первую очередь? Мне нужно, чтобы проект был легко переносимым, что означает, что я должен иметь возможность просто скопировать папку и запустить другой экземпляр VS.

ответ

1

Концепция |DataDirectory| больше подходит для веб-проектов, и учитывая, что Debug работает под управлением Project-Root\bin\Debug, тогда, я думаю, ваше приложение не является веб-приложением.

Самый простой ответ - просто установить файл .mdf на номер Copy if newer или Always copy в вашем проекте. Таким образом, вы всегда получите файл .mdf в правой папке при выполнении приложения с VS.

+0

На данный момент я все еще пытаюсь, но в конечном итоге это будет веб-проект. Я не знал, что '| DataDirectory |' допускается только для них. Но я правильно понимаю, что веб-проект не запускался под «Project-Root \ bin \ Debug», да? –

+1

Веб-проекты поддерживают | DataDirectoy | «из коробки», используя папку «App_Data», в то время как другие проекты требуют некоторого маневрирования (как и с «AppDomain»). Насколько я помню, некоторые части веб-приложения все еще запускаются из 'bin \ [debug | release]' fodlers. Здесь вы можете узнать больше о папке «App_Data»: https://msdn.microsoft.com/en-us/library/aa478948.aspx Просто найдите «App_Data» на этой странице. –