OnModelCreating вызывается только один раз даже для новых контекстов.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 OnModelCreating вызывается только один раз даже для новых контекстов.

Сообщение Anonymous »

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

Однако, хотя конструктор вызывается каждый раз, метод OnModelCreating вызывается только один раз, несмотря на то, что контекст базы данных каждый раз создается из нового. Как мне сбросить это значение?

Я пробовал использовать AsNoTracking и читал об отключении ModelCaching, но не смог понять, как это сделать или было ли это лучший подход. MSDN даже говорит, что «это кеширование можно отключить, установив свойство ModelCaching для данного ModelBuidler[sic]», но его там нет.

Это мой контекст БД:< /p>

Код: Выделить всё

public partial class MissingContext : DbContext
{
private string tableName = "";
public MissingContext(string tableName) : base("name=MissingContext")
{
this.tableName = tableName;
}

public virtual DbSet MissingDataSet { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.ToTable(this.tableName);
}
}
Это мой код для его использования:

Код: Выделить всё

List missingData=null;
string[] inputTables="TABLEA;TABLEB;TABLEC".Split(';');
foreach (string table in inputTables)
{
logger.Info($"Processing {table}");
missingData = null;

MissingContext db = new MissingContext(table);
var query = from d in db.MissingDataSet.AsNoTracking()
select d;
missingData = query.ToList();
}
При работе таблица всегда имеет правильные значения TABLEA, TABLEB, TABLEC и передается конструктору контекста базы данных, однако OnModelCreating вызывается только один раз в самый первый раз. элемент цикла, чтобы SQL, сгенерированный объектом запроса, всегда выбирал из ТАБЛИЦЫ:

Код: Выделить всё

SELECT
[Extent1].[id] AS [id],
[Extent1].[OrganisationName] AS [OrganisationName]
FROM [dbo].[**TABLEA**] AS [Extent1]
*извиняюсь, если какой-то код выглядит неправильно, я переименовываю некоторые переменные, поскольку они чувствительны к бизнесу.

Подробнее здесь: https://stackoverflow.com/questions/491 ... w-contexts
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Автоматические поля CreatedAt и UpdatedAt OnModelCreating() в ef6
    Anonymous » » в форуме C#
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Как справиться с большой функцией OnModelCreating в Entity Framework?
    Anonymous » » в форуме C#
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Как справиться с большой функцией OnModelCreating в Entity Framework?
    Anonymous » » в форуме C#
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Почему не показывать EF Core 6, AppDbContext onModelCreating в modelbuilder.HasDefaultSchema("Имя схемы");
    Anonymous » » в форуме C#
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Использование отражения в EF6 OnModelCreating для переименования всех свойств DbSet в нижний регистр.
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»