Я делаю свою домашнюю работу, службу WCF, которая использует SQL Server с Entity Framework, размещается в консольном приложении и использует клиент WPF.
Существует 3 разных проекта, и хост и сервис находятся в одном решении.Я включил строку подключения Entity Framework в файл app.config
консоли хостов из файла web.config
из службы.Таким образом, сервер и хост выдают исключение, когда я пытаюсь сделать запрос:
System.Data.Entity.Core.EntityException: «Базовый поставщик не удалось открыть».
Внутреннее исключение говорит:
SqlException: попытка присоединить базу данных с автоматическим именем для файла C: \ Users \ username \ source \ repos \ BlogAppWcf \ BlogHost \ bin \ Debug\ BlogDb.mdf не удалось.База данных с тем же именем существует, или указанный файл не может быть открыт, или он находится на общем ресурсе UNC.
Таким образом, он в основном ищет файл .mdf
в своей папке проекта, в то время как онвнутри папки App_Data
службы.
Исходная строка подключения выглядит следующим образом, я скопировал ее на app.config
хоста из web.config
:
connectionString="metadata=res://*/BlogDbEntities.csdl|res://*/BlogDbEntities.ssdl|res://*/BlogDbEntities.msl;
provider=System.Data.SqlClient;
provider connection string="
data source=(LocalDB)\MSSQLLocalDB;
attachdbfilename=|DataDirectory|\BlogDb.mdf;
integrated security=True;
MultipleActiveResultSets=True;App=EntityFramework""
Я пыталсяизменив атрибут AttachDbFilename
в app.config
, я дал ему абсолютный путь, подобный этому:
attachdbfilename=C:\Users\username\source\repos\BlogAppWcf\BlogAppWcf\App_Data\BlogDb.mdf;
, и таким образом он работает как шарм!Больше нет исключений в запросах.
Но это неправильный способ сделать это, особенно потому, что я должен отправить это своему учителю.Я хочу дать ему относительный путь, вот так:
attachdbfilename=..\..\..\BlogAppWcf\App_Data\BlogDb.mdf;
, но он не работает таким образом.
Кто-нибудь получил какие-либо предложения, может быть, я делаю или думаючто-то совершенно не так?