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

EntityFramework - где строка соединения?

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

4b9b3361

Ответ 1

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

Если ваш класс 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") {}
    }
}

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

Ответ 2

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

<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.

Ответ 3

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

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

Просто протестируйте соединение, и он сработал.

Ответ 4

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

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

Ответ 5

Посмотрите в App.Config. Он также сохранит его там.

Ответ 6

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

Ответ 7

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

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

Ответ 8

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