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

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