Строки подключения, добавляющие пространство имен при развертывании Entity Framework в Azure - PullRequest
0 голосов
/ 11 апреля 2019

Я развертываю сайт в Azure, который использует EF6, используя опцию публикации VS Studio.

Я использую поведение по умолчанию для именования баз данных, а не задаю строку подключения, так как я делаю разработку с нескольких машин, которые имеют смесь localDB или SQL Express:

public WebsiteDBContext() : base("WebsiteDBContext")

EFвесь код находится в отдельном проекте для веб-сайта, так как он используется на нескольких веб-сайтах, совместно использующих одну и ту же базу данных.

Когда я публикую в Azure строки подключения, добавленные в web.config, включают пространство имен из проекта, код DBContextнаходится в:

<add name="Utils.Models.WebsiteDBContext" connectionString="Data Source=****.database.windows.net;Initial Catalog=MyDatabase;Persist Security Info=True;User ID=****;Password=****" providerName="System.Data.SqlClient" />
<add name="DefaultConnection" connectionString="Data Source=tcp:****.database.windows.net,1433;Initial Catalog=CreweAllen;User ID=****;Password=****" providerName="System.Data.SqlClient" />
<add name="Utils.Models.WebsiteDBContext_DatabasePublish" connectionString="Data Source=****.database.windows.net;Initial Catalog=MyDatabase;Persist Security Info=True;User ID=****;Password=****" providerName="System.Data.SqlClient" />

Миграция не запускается, я думаю, потому что она не может найти базу данных.

Если я вручную создаю таблицы и удаляю создания таблиц миграции, с которыми веб-сайт не работает: При установлении соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром.Сервер не найден или не был доступен.Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений.(поставщик: сетевые интерфейсы SQL, ошибка: 52 - Невозможно найти установку локальной базы данных времени выполнения.

Но если отредактировать файл web.config и удалить «Utils.Models.» из строки подключения WebsiteDBContext, но не из WebsiteDBContext_DatabasePublishон подключается к базе данных в порядке.

Как мне правильно назвать соединения и запустить миграцию? Пытался, но не смог найти решение.

Спасибо

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

В конечном итоге разрешил его.

Опубликованному приложению не удалось найти строку подключения с именем, которое он искал "WebsiteDBContext", поскольку мастер развертывания VS называл строку подключения "Utils.Models.WebsiteDBContext"поэтому он возвращался к EF-соединению по умолчанию, которое было localDB:

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">

Когда я перестал явно называть имя БД в DBContext:

public WebsiteDBContext() : base() 

Затем имя соединенияприложение искало «Utils.Models.WebsiteDBContext», которое оно нашло.

Так что не очень хорошо работает публикация в Azure через мастер VS с именем DBContext, поскольку строки подключения, созданные в Azure, имеют полный наборПространство имен.

0 голосов
/ 11 апреля 2019

Ваш контекстный класс называется WebsiteDBContext.По договоренности в вашем файле web.config будет строка подключения с именем WebsiteDBContext.Когда вы включаете перенос кода с помощью этого мастера, мастер создаст вторую строку подключения с именем WebsiteDBContext_DatabasePublish, которая будет использоваться только для запуска вашего кода при первой миграции.

Обновите ваш DbContext, которыйматериал datapublish все еще находится в webconfig, но нет, я больше не получаю исключение.

    public WebsiteDBContext():base("WebsiteDBContext", throwIfV1Schema: false) // throwIfV1Schema:false was added as the Identity V2 was causing an error in Azure

Для получения более подробной информации вы можете обратиться к этой проблеме .

...