0

У меня есть два отдельных проекта: один для взаимодействия данных и другой для WebUI.Entity Framework (Database First) Не удается найти строку подключения

web.config, в корне проекта WebUI имеет следующую строку соединения:

<add name="MySiteEntities" connectionString="metadata=res://*/MySite.csdl|res://*/MySite.ssdl|res://*/MySite.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=tcp:**********.database.windows.net,****;initial catalog=MySite;user [email protected]**********;password=*******;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" /> 

DbContext генерируется EDMX (база данных первого) имеет следующее:

public partial class MySiteEntities : DbContext 
{ 
    public MySiteEntities() 
     : base("name=MySiteEntities") 
    { 
    } 
... 

При Я запускаю инфраструктуру сущности сайта, которая находит строку соединения и успешно соединяется с базой данных.

Однако, когда я публикую, сущность рамки не может найти строку соединения и вместо этого выбрасывает UnintentionalCodeFirstException.

Что именно я делаю неправильно здесь?

+0

Вы подтвердили, что опубликованное приложение использует правильный файл конфигурации? В моей среде у меня есть файлы конфигурации Debug и Released, и когда я запускаю локально, это версия Debug, но я публикую Release (что меняет несколько вещей) – Thelonias

+0

@Ryan Обе версии для выпуска и отладки моего конфигурационного файла одинаковы , Я проверил это, подключившись через FTP и проверив web.config. У web.config есть такая же строка соединения, что и в сообщении. –

ответ

0

Первым шагом в отладке является убедиться, что вы понимаете, что выбрано исключение. Согласно MSDN docs, UnintentionalCodeFirstException является:

Исключение, которое генерируется, когда контекст создается из шаблонов DbContext в базе данных First или Model First режиме, а затем используется в Code First режиме.

Это не очень полезно, но это ключ вам вроде того, что происходит: вы создали свой контекст с использованием базы данных First или Model First, но теперь по какой-то причине, контекст думает, что он должен быть Code First ,

Небольшой поиск, основанный на этом сетевом мне: Don’t use Code First by mistake, который справедливо объясняет возможные причины. Я предлагаю вам дать ему прочитать и посмотреть, если что-нибудь попсовое для вас.

Мое лучшее предположение, поскольку это работает локально, но не удаленно, заключается в том, что отображение EDMX, соответствующее вашей строке соединения, не делало скачок по какой-либо причине. Если вы используете исходный контроль, возможно, он не получил совершенства. Без этого сопоставления EF приведет к стратегии Code First, которая приведет к этому исключению.

+0

Как упоминалось в статье: «OnModelCreating никогда не будет вызываться при использовании подхода Database First». Я согласен с тем, что что-то не так с моими EDMX-сопоставлениями, поскольку сущность-структура, похоже, сначала пытается использовать код. Я понятия не имею, что может быть неправильно с моим EDMX, но я буду продолжать искать. –

0

Я не думаю, что вам нужно «tcp:» в значении для datasouce в вашей строке соединения. У меня нет этого в конфиге для моего приложения azure, и он отлично работает.

Смежные вопросы