Подтвердить что ты не робот

Entity Framework не может найти строку подключения в Web.config

Entity Framework на самом деле не считывает строки подключения из Web.config.

Я начал новый проект и создал контекст:

public class FooContext : DbContext
{
    public FooContext() :
        base("Foo")
    {
    }

    // DbSets here
}

Затем я добавил строку подключения к проектам Web.config:

<configuration>
  <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>
    <add name="Foo" providerName="System.Data.SqlClient" connectionString="Data Source=Foo;Initial Catalog=Foo;Integrated Security=False;User Id=foo;Password=foo;MultipleActiveResultSets=True" />
  </connectionStrings>
  <appSettings>
      ...

Я включил миграции, сгенерировал первоначальную миграцию и попытался обновить базу данных. Через некоторое время обновление не позволяет утверждать, что он не может подключиться к базе данных. Поэтому я вытащил DLL проекта в LINQPad и выполнил следующее:

var context = new FooContext();
context.Database.Connection.ConnectionString.Dump();

И я получаю следующий вывод:

Data Source=.\SQLEXPRESS;Initial Catalog=Foo;Integrated Security=True;MultipleActiveResultSets=True

Он пытается подключиться к LocalDB, полностью игнорируя мою строку подключения. Поэтому я попытался быть более явным в конструкторе контекста, используя "name=Foo" вместо "Foo".

public FooContext() :
    base("name=Foo")
{
}

Для чего это стоит, мне никогда не приходилось делать это раньше. У меня даже есть другие проекты в том же решении, где я просто передал имя строки подключения, и они отлично работали.

Я возвращаюсь обратно в LINQPad и снова запускаю код, и теперь получаю исключение:

No connection string named 'Foo' could be found in the application config file.

У меня полная потеря. Я создал такие проекты, как эта 100 раз, и у меня никогда не было проблем. Поскольку это может быть важно, я запускаю последнюю Entity Framework, 6.1.3. Любые идеи, что здесь возможно?

4b9b3361

Ответ 1

Я предполагаю, что вы запускаете это в Visual Studio, убедитесь, что вы запускаете свой веб-проект в качестве проекта запуска, чтобы использовать web.config. Если вы запускаете другую консоль или проект .tests в качестве запуска, она будет собирать файлы app.config в качестве файла конфигурации.

Ответ 2

Помните, что EntityFramework ищет строки подключения в конфигурации сборки, которая запускает код. Если вы, например, выполняете свои методы EF с помощью методов тестирования с помощью unit test runner, тогда EF будет искать его в сборке тестов, а не в том месте, где хранятся методы EF. Я считаю, что это может быть ваш случай.

Кстати, в EntityFramework 5, когда Edmx создан, он автоматически генерирует DbContext, он использует name=ConnectionString, а не только ConnectionString, поэтому я думаю, что все в порядке.