在依赖注入中使用 Entity Framework Core DbContext 时不调用 OnModelCreating

Posted

技术标签:

【中文标题】在依赖注入中使用 Entity Framework Core DbContext 时不调用 OnModelCreating【英文标题】:OnModelCreating is not called when Entity Framework Core DbContext is used in Dependency Injection 【发布时间】:2022-01-01 04:00:27 【问题描述】:

以下是我的 Web API 设置。

在 startup.cs 中,我添加了我的 DbContext 类。

public void ConfigureServices(IServiceCollection services)

            services.AddDbContext<AppDbContext>(options =>
                        options.UseSqlServer(Configuration.GetConnectionString("DBConnection")));

            ...

这是我的连接字符串

"DBConnection": "server=(localdb)\\MSSQLLocalDB;database=EmployeeDB;Trusted_Connection=true"

在 appsettings.json 文件中

然后我有 DbContext 类

public class AppDbContext : DbContext
    
        public AppDbContext(DbContextOptions<AppDbContext> options)
        : base(options)
        
        

        public DbSet<Employee> Employees  get; set; 
        public DbSet<Department> Departments  get; set; 

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        
            base.OnModelCreating(modelBuilder);
            ...
        
    

我正在将这个 DbContext 注入到存储库中

public class EmployeeRepository : IEmployeeRepository
    
        private readonly AppDbContext appDbContext;

        public EmployeeRepository(AppDbContext appDbContext)
        
            this.appDbContext = appDbContext;
        

        public async Task<Employee> GetEmployee(int employeeId)
        
            return await appDbContext.Employees
                .FirstOrDefaultAsync(e => e.EmployeeId == employeeId);
        
    

最后将存储库注入到控制器中。 我正在使用 .net6,VS 2022。 问题是发出 API 请求时未调用 OnModelCreating。调用了 AppDbContext 构造函数,但未调用方法 OnModelCreating。

这适用于 .net3.1 和 VS 2019,但我刚刚迁移到最新版本以使用另一个仅适用于最新版本的库。

您能帮我了解发生了什么变化吗?我错过了什么?

【问题讨论】:

我无法重现它(至少在我的设置中),但在极少数情况下,迁移时您可能会在另一个名称空间中留下另一个具有相同名称的类?如果不是,您可能必须创建一个全新的项目,看看是否仍然存在问题,然后将其发布到 Github 上,以便我们检查新项目中是否仍然存在。 【参考方案1】:

哦,我不小心在旧版本上保留了两个包 - microsoft.entityframeworkcore.sqlserver 和 microsoft.entityframeworkcore.tools 未迁移到版本 6.0.0。我现在迁移它们并解决了问题。

【讨论】:

以上是关于在依赖注入中使用 Entity Framework Core DbContext 时不调用 OnModelCreating的主要内容,如果未能解决你的问题,请参考以下文章

.NET Entity Framework Core、依赖注入和线程的 DBContext System.ObjectDisposed 异常

Entity Framework 的 SQL 运算符函数对 SQL 注入安全吗?

Entity Framework 基础操作

Play framework + Scala:使用动作组合注入依赖

如何使用 Entity Framework Core 获取主键值

Play Framework 2.4 - 依赖注入替换 GlobalSettings.onStart()