Использование скомпилированной модели для подключения DbContext – Bad Sql

У меня есть DbContext, который я хочу развернуть, чтобы обрабатывать ряд таблиц с одинаковыми свойствами. Поскольку OnModelCreating запускается только один раз, мне нужно скомпилировать модель вручную и передать ее в конструктор, чтобы она могла уважать изменения в имени таблицы.

На моем пути строительства я делаю что-то похожее на это:

var modelBuilder = new DbModelBuilder(); var cs = WebConfigurationManager.ConnectionStrings.Cast<ConnectionStringSettings>().FirstOrDefault(x => x.Name == "MyConnectionString"); using(var connection = new SqlConnection(cs.ConnectionString)) { // This sets up the ToTable/HasKey/etc information ConfigureSpecificModelInformation(modelBuilder); var model = modelBuilder.Build(connection).Compile(); // DbContext with an IDbSet<T> Entities Context = new MyDbContext(model); // This will throw a SqlException (inside of an EntityException) Context.Entities.ToList(); } 

Исключение составляет:

 System.Data.SqlClient.SqlException : Cannot open database "Namespace.Name.ForThisContext.MyDbContext" requested by the login 

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

Мне было сложно найти информацию об этом, и поскольку MS удалила нам возможность отключить кэширование модели, мне нужен способ обойти это.

Вы должны использовать эту перегрузку для ctor DbContext . Это позволяет вам также передать соединение, которое вы используете. То есть:

 var modelBuilder = new DbModelBuilder(); var cs = WebConfigurationManager.ConnectionStrings.Cast<ConnectionStringSettings>().FirstOrDefault(x => x.Name == "MyConnectionString"); using(var connection = new SqlConnection(cs.ConnectionString)) { // This sets up the ToTable/HasKey/etc information ConfigureSpecificModelInformation(modelBuilder); var model = modelBuilder.Build(connection).Compile(); // DbContext with an IDbSet<T> Entities Context = new MyDbContext(connection, model, false); // This will throw a SqlException (inside of an EntityException) Context.Entities.ToList(); } 
  • Временные интервалы Entity Framework в режимах SaveChanges
  • Проверьте целостность данных или дайте дескриптор базы данных
  • Объектная структура CREATEs для столбцов базы данных SQL Server не поддающихся вычислению
  • Как создать и использовать хранимую процедуру для SQL-Sever, которая удалит данные во всех таблицах в базе данных с помощью VS 2010?
  • Как изменить тайм-аут для команды connection_instance.Open ()?
  • Вставляет ли данные в SQL Server всю таблицу?
  • Каков первоначальный каталог в локальной базе данных SQL Server?
  • Entity Framework дает мне старые данные, хотя я их изменил
  • Отладка «Зависимое свойство в ссылочном указателе сопоставляется с столбцом, созданным магазином».
  • База данных Entity FrameworkGeneratedOption SQL Server GETDATE
  • У меня есть представление SQL с UNION, а при использовании через Entity Framework результаты неверны. Зачем?
  • Interesting Posts

    Сравнение производительности динамического запроса в sql

    SQL Текущий месяц / год вопрос

    Изменение экземпляра экземпляра SQL Server по умолчанию

    Фильтрация SSRS на основе длины содержимого в ячейке

    Проверить синтаксис DDL CREATE TABLE с помощью команды EXPLAIN

    Создание непоследовательного списка чисел (из большого диапазона)

    Будет ли создание приложения с использованием файла базы данных Sql Server (mdf) ужасной идеей?

    Обновить поле внешнего ключа записи на основе первичного ключа новой вставленной записи

    T-SQL получает количество рабочих дней между двумя датами

    Как узнать, изменилась ли запись базы данных?

    Создание последовательных номеров счетов в SQL Server без условия гонки

    Откат SQL Server от кода

    Выделить весь столбец с помощью функции

    SQL Server 2012: как индекс столбца может содержать сразу несколько столбцов?

    SQL слияние дубликатов столбцов с помощью группы по

    Давайте будем гением компьютера.