Как правильно включить строку подключения Entity Framework, используемую в службе WCF, в консольное приложение с самостоятельным размещением? - PullRequest
0 голосов
/ 25 декабря 2018

Я делаю свою домашнюю работу, службу 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;

, но он не работает таким образом.

Кто-нибудь получил какие-либо предложения, может быть, я делаю или думаючто-то совершенно не так?

1 Ответ

0 голосов
/ 26 декабря 2018

Согласно вашему описанию и проблеме, с которой вы столкнулись, проблема сводится к тому, что подключенная база данных неправильно подключена к экземпляру встроенного сервера базы данных VS.По этой причине, я думаю, мы могли бы настроить EntityFramework со строкой экземпляра встроенной базы данных VS.

Источник данных = (localdb) \ MSSQLLocalDB; Начальный каталог = MyStore; Интегрированная безопасность = True; Время ожидания подключения= 30; Encrypt = False; TrustServerCertificate = False; ApplicationIntent = ReadWrite; MultiSubnetFailover = False

А затем переопределите метод семени класса DropCreateDatabaseAlways / DropCreateDatabaseIfModelChanges, чтобы предоставить начальные данные бесплатно.
Feeдайте мне знать, если есть что-то, с чем я могу помочь.

...