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