EntityFramework - Где находится строка подключения? - PullRequest
20 голосов
/ 26 апреля 2011

Я удалил строку подключения из моего web.config, и Entity Framework все еще подключается к базе данных!Где устанавливается строка подключения?Это проблема, потому что мне нужно, чтобы живая версия моего сайта указывала на живую базу данных.

Ответы [ 8 ]

16 голосов
/ 19 июня 2011

Вот кое-что, что я нашел с философией «соглашения о конфигурации», когда речь идет о попытке подключиться к существующим базам данных (как вы делаете).

Если ваш класс DbContext (например, Northwind) находится впространство имен (например, MvcProject), по какой-то причине EF не будет сопоставлять имя класса со строкой подключения в web.config с именем "Northwind" (или "MvcProject.Northwind"), а затем просто создаст строку подключенияпо умолчанию используется локальный экземпляр SQLEXPRESS с базой данных «MvcProject.Northwind».Это будет пустая база данных.И вы сломаете голову, пытаясь понять, почему вы не получаете данные обратно, пока не поймете, что не подключены к нужной БД.

То, как я это обошел (не элегантно, ноэто самый быстрый способ, который я нашел, чтобы исправить это): добавьте конструктор в ваш класс DbContext, который вызывает базу с именем строки подключения в web.config - например,

namespace MvcProject
{
    public class Northwind : DbContext
    {
        public Northwind() : base("Northwind") {}
    }
}

Надеюсь, что кто-то там поможет; -)

9 голосов
/ 26 апреля 2011

Вам понадобится что-то вроде этого:

<configuration>
  <connectionStrings>
    <add name="MyContext"
         connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=YourDatabaseName"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

Или, если ваша база данных находится в папке App_Data:

<configuration>
  <connectionStrings>
    <add name="MyContext"
         connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|YourDatabaseFilename.mdf;User Instance=True"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

Замените MyContext именем вашего класса, которое расширяется DbContext.

4 голосов
/ 04 августа 2011

EF не может найти соединение для меня, но я использовал строку подключения в базе ():

namespace MvcProject 
{     
    public class Northwind : DbContext     
    {         
        public Northwind() : 
            base("Data Source=servername;Initial Catalog=database;User ID=yourID;Password=yourPass;Trusted_Connection=False;") {}
    }
}  

Просто чтобы проверить соединение, и оно работает.

2 голосов
/ 26 апреля 2011

Конвенция> Конфигурация, верно?

По умолчанию EF Code fist создаст базу данных в вашем локальном экземпляре SQL Express.

1 голос
/ 14 июля 2015

Я столкнулся с той же проблемой и просто изменил имя строки подключения, как предложено в файле web.config, как имя context db, и все прошло хорошо.

1 голос
/ 26 апреля 2011

Посмотрите в App.Config.Он тоже будет там храниться.

0 голосов
/ 26 апреля 2011

Если вы используете codefirst aproach с DbContext, вы можете поместить строку подключения с именем, соответствующим вашему имени класса контекста, в ваш файл web.config, и он будет работать просто отлично.

0 голосов
/ 26 апреля 2011

Щелкните правой кнопкой мыши режим Entity Framework (файл edmx)> перейдите в Свойства. Там вы увидите строку подключения.

Если ваша Entity Model находится в отдельном проекте, то она должна быть в собственном файле настроек.

...