gpt4 book ai didi

c# - 即使对于新的上下文,OnModelCreating 也只调用一次

转载 作者:行者123 更新时间:2023-12-03 16:41:03 25 4
gpt4 key购买 nike

我有多个相同但内容不同的 SQL 服务器表。在编写代码第一个 EF6 程序时,我试图为每个程序重用相同的 db 上下文并将表名传递给上下文构造函数。

然而,虽然每次都调用构造函数,但 OnModelCreating 方法只被调用一次,尽管每次都从 new 创建 db 上下文。我该如何重置?

我曾尝试使用 AsNoTracking 并且我阅读了禁用 ModelCaching 的内容,但无法找到如何执行此操作或这是否是最佳方法。 MSDN 甚至说“可以通过在给定的 ModelBuidler[sic] 上设置 ModelCaching 属性来禁用这种缓存”,但它不存在。

这是我的数据库上下文:

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

public virtual DbSet<MissingData> MissingDataSet { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<MissingData>()
.ToTable(this.tableName);
}
}

这是我使用它的代码:
List<MissingData> 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 并将其传递给 db 上下文构造函数,但是 OnModelCreating 仅针对第一个循环项调用一次,因此查询对象生成的 SQL 始终从 TABLEA 中选择:
SELECT 
[Extent1].[id] AS [id],
[Extent1].[OrganisationName] AS [OrganisationName]
FROM [dbo].[**TABLEA**] AS [Extent1]

*抱歉,如果任何代码看起来有误,我会重命名一些变量,因为它们是业务敏感的。

最佳答案

OnModelCreating只会被调用一次,这是默认行为。

根据 OnModelCreating文档。

Typically, this method is called only once when the first instance of a derived context is created. The model for that context is then cached and is for all further instances of the context in the app domain. This caching can be disabled by setting the ModelCaching property on the given ModelBuidler, but note that this can seriously degrade performance. More control over caching is provided through use of the DbModelBuilder and DbContextFactory classes directly.

关于c# - 即使对于新的上下文,OnModelCreating 也只调用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49175225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com