Строка соединения с именем "MyEntities" не найдена в файле конфигурации приложения

Я использую структуру сущности и ASP.NET MVC 4 для создания приложения

Мое решение разделено на два проекта:

  • Библиотека классов, включающая мой файл модели данных (.edmx) и несколько пользовательских интерфейсов
  • Проект MVC-контейнера, который ссылается на библиотеку классов выше

Моя проблема в том, что когда я пытаюсь использовать "MyEntites" DbContext, я получаю следующую ошибку:

Никакая строка соединения с именем "MyEntities" не может быть найдена в файл конфигурации приложения.

Я предполагаю, что проблема связана с тем фактом, что строка подключения находится в файле app.config библиотеки классов, а не в проекте MVC.

Есть ли у кого-нибудь предложения?

Ответ 1

Попробуйте скопировать строку соединений в файл .config в проекте MVC.

Ответ 2

Вы правы, это происходит потому, что библиотека классов (где .edmx файл) не является вашим проектом запуска/основного проекта.

Вам нужно скопировать строку подключения в файл конфигурации основного проекта.

Если ваш стартовый/основной проект не имеет конфигурационного файла (как в случае с консольным приложением), просто добавьте его (Startup project - Добавить новый элемент → Файл конфигурации приложения).

Более подробную информацию можно найти здесь: MetadataException: невозможно загрузить указанный ресурс метаданных

Ответ 3

убедитесь, что вы создали свой проект (с помощью DbContext) в качестве запуска

в правом щелчке проекта и выберите

ИЛИ

Добавить в проект, который установлен как запуск вашей строки подключения в app.config(или web.config)

ИЛИ

Вызвать команду, подобную этой

Update-Database -Script -ProjectName '<project name>' -StartupProjectName '<project name>' -ConnectionString 'data source=.;initial catalog=<db name>;integrated security=True;MultipleActiveResultSets=True' -ConnectionProviderName 'System.Data.SqlClient'

Затем повторите попытку

Ответ 4

Вы можете просто передать строку подключения EntityFramework и продолжить свою жизнь:

public partial class UtilityContext : DbContext
{
    static UtilityContext()
    {
        Database.SetInitializer<UtilityContext>(null);
    }

    public UtilityContext()
        : base("Data Source=SERVER;Initial Catalog=DATABASE;Persist Security Info=True;User ID=USERNAME;Password=PASSWORD;MultipleActiveResultSets=True")
    {
    }

    // DbSet, OnModelCreating, etc...
}

Ответ 5

Как вы догадались, это связано с тем, что строка подключения находится в app.config библиотеки классов.

Скопируйте запись из класса app.config в контейнер app.config или web.config файл

Ответ 6

Если у вас несколько проектов в решении, тогда проект setUp запускается там, где у вас есть правка App.config.

Ответ 7

скопируйте строку подключения в файл app.config или web.config в проекте, который настроен на "Установить как проект StartUp", и если вы используете структуру данных на уровне данных, установите основной фреймворк в основной проект.

Ответ 8

Это также происходит, если проект запуска изменен на тот, который не имеет строки подключения.

  • Щелкните правой кнопкой мыши Solution - щелкните свойства
  • В разделе Общие свойства выберите проект запуска
  • На правой панели выберите проект, который имеет строки подключения (в большинстве случаев это будут проекты MVC - проект, который запускает решение)

Ответ 9

  1. Добавить файл App.Config
  2. Установите проект в качестве запуска проекта.
  3. Убедитесь, что вы добавили строки подключения после раздела entityFramework :

    <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
    
    </configSections>
    
    <connectionStrings>
       <!-- your connection string goes here, after configSection -->
    </connectionString>
    

Ответ 10

Да, это глупо. Вы можете избежать копирования строки подключения с помощью построителя соединений. Код VB.Net(используется в производстве, но слегка изменен здесь, поэтому относитесь к непроверенным, с удовольствием помогаем с любыми проблемами), где у меня есть переменная serverName, переменная databaseName, передаю их в метод и создаю для него соединение для меня:

    Dim EfBuilder As New System.Data.EntityClient.EntityConnectionStringBuilder("metadata=res://*/VMware.VmEf.csdl|res://*/VMware.VmEf.ssdl|res://*/VMware.VmEf.msl;provider=System.Data.SqlClient;provider connection string=""data source=none;initial catalog=none;integrated security=True;multipleactiveresultsets=True;App=EntityFramework""")
   Dim SqlBuilder As New Data.SqlClient.SqlConnectionStringBuilder(EfBuilder.ProviderConnectionString)
                        SqlBuilder.DataSource = serverName
                        SqlBuilder.InitialCatalog = databaseName
                        EfBuilder.ProviderConnectionString = SqlBuilder.ConnectionString
                        Using vmCtx As New VmEfConn(EfBuilder.ConnectionString)

Ответ 11

Вы используете более одного проекта для своего решения?

Потому что, если вы, веб-конфиг, который вы должны проверить, это тот, который находится в том же проекте, что и файл .edmx

Ответ 12

Добавить файл ConnectionString в файл MVC Project Web.config

Ответ 13

У меня возникла эта проблема, когда я использую несколько proyects, start proyect с web.config и app.config для проекта EntityFramework.

чтобы избежать этой проблемы, вы должны:

  • Вам нужна строка подключения в запущенном файле *.config.
  • Вам необходимо установить DLL EntityFramework в ваши ссылки.

Ответ 14

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

Ответ 15

Я получил это, не установив проект в качестве запуска, как указано в другом ответе. Мой вклад в это - при выполнении Add-Migrations и Update-Database, укажите запускаемый проект как часть команды в консоли Nuget Package Manager Console (не включайте символы '[' или ']', которые просто показывают, что вы необходимо изменить текст, расположенный там на название вашего проекта):

  1. Enable-Миграция
  2. Add-Migrations -StartupProject [имя вашего проекта, которое содержит класс контекста данных]
  3. Обновление базы данных -StartupProject [то же имя проекта, что и выше]

Это должно сделать это.

Ответ 16

Строка соединения, сгенерированная проектом, содержащим файл .edmx, генерирует строку подключения, это будет представлять собой задержку из файлов app.config, которые были скопированы в выходной каталог и на которые ссылается исполняемый файл для хранения времени выполнения config.

Это нарушает веб-проект, так как нет автоматического процесса добавления случайной информации .config в файл web.config для веб-проекта.

Проще всего скопировать строку подключения из файла конфигурации в раздел подключений файла web.config и игнорировать содержимое файла конфигурации.

Ответ 17

Лучший способ, которым я только что решил обратиться, - временно установить этот проект (скорее всего, библиотеку классов) в проект запуска. Это заставляет консоль менеджера пакетов использовать этот проект в качестве источника конфигурации. часть причины, по которой он настроен таким образом, происходит из-за модели сверху вниз, которой обычно следуют файлы econfig. Эмпирическое правило состоит в том, что проект, который ближе всего к клиенту (например, приложение MVC), является файлом web.config или app.config, который будет использоваться.

Ответ 18

Убедитесь, что вы установили строку подключения в проект запуска ROOT web.config.

Я знаю, что я как бы заявляю здесь очевидное, но это случилось со мной тоже - хотя у меня уже была строка подключения в моем проекте MVC Web.Config(файл .edmx был помещен в другой проект библиотеки классов) и я не мог понять, почему я все время получаю исключение... Короче говоря, я скопировал строку соединения в Views\Web.Config по ошибке, в странной комбинации усталости и сценария без прокрутки до нижнего уровня. Да, эти вещи случаются и с ветеранами-разработчиками:)

Ответ 19

Эта проблема возникает, когда вы используете слои в своем проекте и определяете или устанавливаете работу фрейма Entity в DataLayer и пытаетесь запустить проект

Итак, чтобы преодолеть эту проблему, скопируйте строку соединения со слоя, где находится файл Edmx, и вставьте строку подключения в main web.config.

Ответ 20

Добавьте строку подключения в корневой файл web.config проекта MVC-контейнера, который ссылается на библиотеку классов следующим образом:

 <connectionStrings>

  <add name="MyEntities" connectionString="complete connection string here" providerName="System.Data.SqlClient" />

  </connectionStrings>

Если вы не хотите использовать "MyEntities" в качестве имени подключения, измените его, как хотите, но внесите следующие изменения в класс MyEntities DbContext:

MyEntities: DbContext
 {
   public MyEntities():base("Name-Of-connection-string-you wish to connect"){ }
 }

Причина этой ошибки: если мы не укажем имя строки подключения или соедините строку в производном классе DbConext (в вашем случае это MyEntities), то DbContext автоматически выполнит поиск строки подключения в корневом файле web.config имя whoes совпадает с именем производного класса (в вашем случае это My Entities).

Ответ 21

У меня была эта проблема при запуске MSTest. Я не мог заставить его работать без флага "noisolation".

Надеюсь, это поможет кому-то. Потратьте мне много времени, чтобы понять это. Из среды IDE все отлично. Что-то странное в рамках платформы Entity Framework в этом контексте.

Ответ 22

Регулярные миграции

Существует два варианта: первый, предложенный всеми здесь, заключается в том, чтобы убедиться, что строка подключения находится в файле Web.config проекта. При работе со строками подключения от параметров приложения Azure это означает перезапись значений Web.config со значениями Azure.

Лазурная или автоматическая миграция (программная)

Имеется второй вариант, если вы программно выполняете миграцию, что позволяет запускать миграции с помощью строки подключения, которая получается динамически (или через параметры приложения Azure) без сохранения в Web.config:

При настройке конфигурации TargetDatabase используйте конструктор DbConnectionInfo, который берет строку подключения и имя поставщика вместо конструктора, который принимает только имя соединения. Если в строке соединения нет имени поставщика и вы используете SQL Server/Azure SQL, используйте "System.Data.SqlClient"

Ответ 23

Это также может привести к тому, что в вызывающем коде будет недостаточно ссылок на dll. Небольшой неуклюжий взлом может спасти ваш день.

Я следовал подходу DB First и создал файл EDMX в проекте библиотеки классов DAL, который имел ссылку на библиотеку классов BAL, на которую, в свою очередь, ссылалась служба WCF.

Так как я получал эту ошибку в BAL, я попробовал вышеупомянутый метод, чтобы скопировать детали конфигурации из App.config проекта DAL, но не решил. В конце концов, по совету друга, я просто добавил фиктивный файл EDMX в проект WCF (с соответствующим подключением к БД и т.д.), Поэтому он импортировал все необходимое, а затем я просто удалил файл EDMX и просто избавился от проблемы с чистая сборка.

Ответ 24

Это потому, что ваш контекстный класс наследуется от DbContext. Я полагаю, ваш ctor такой:

public MyEntities()
    : base("name=MyEntities")

name=... следует изменить на ваше имя Строка соединения

Ответ 25

Существует комментарий на главный ответ @RyanMann, который предлагает:

Сохраните строки подключения в одном файле конфигурации, а затем назовите их в других проектах с помощью <connectionString configSource="../ProjectDir/SharedConnections.config" />

Это фантастическое предложение!

Он также работает для совместного использования строк соединения между файлами App.config и Web.config!

Любой, кто хочет следовать этому предложению, должен перейти к такому ответу. В нем есть действительно отличное пошаговое руководство по совместному использованию строк подключения несколькими проектами в решении.

Единственное предостережение в том, что configSource должен существовать в том же каталоге или подкаталоге. Ссылка выше объясняет, как использовать "Добавить как ссылку", чтобы обойти это.

Ответ 26

Добавить Connectoinstrnig в файл web.config

<ConnectionStiring> <add name="dbName" Connectionstring=" include provider name too"  ></ConnectionStiring>