entity-framework - 不使用 OnConfiguring(DbContextOptionsBuilder optionsBuilder) 无法构造 DbContext
问题描述
我正在开发一个 .NET CORE MVC 2.1 Web 应用程序,它在 DLL (EF Core 2.1) 中声明了一个 DbContext。
我想使用IServiceCollection.AddContext<GladContext
> 配置上下文,但如果我不配置它,我会被告知没有为此 DbContext 配置数据库提供程序,尽管有一个构造函数采用DbContext.OnConfiguring(DbContextOptionsBuilder optionsBuilder)
DbContextOptions<GladContext>
public GladContext(DbContextOptions<GladContext> options, IGladConnectionStringProvider connectionStringProvider) : base(options)
{
_connectionStringProvider = connectionStringProvider;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
GladOptionsBuilderHelper.ConfigureDefaultOptionsBuilder(optionsBuilder, _connectionStringProvider.ConnectionString);
base.OnConfiguring(optionsBuilder);
}
这IGladConnectionStringProvider
是我目前的解决方法,如果不是因为我现在需要同时配置DbContextOptionsBuilder
和DbContextOptionsBuilder<GladContext>
public static class GladOptionsBuilderHelper
{
public const string GladMigrationsHistory = "__GladMigrationsHistory";
public static DbContextOptionsBuilder<GladContext> CreateDefaultTypedOptionsBuilder(string connectionString)
{
var optionsBuilder = new DbContextOptionsBuilder<GladContext>();
optionsBuilder
.UseSqlServer(connectionString, options =>
{
options.EnableRetryOnFailure();
options.MigrationsHistoryTable(GladMigrationsHistory, EntityBase.SchemaName);
})
.ConfigureWarnings(warnings => warnings.Throw(RelationalEventId.QueryClientEvaluationWarning));
return optionsBuilder;
}
public static void ConfigureDefaultOptionsBuilder(DbContextOptionsBuilder optionsBuilder, string connectionString)
{
optionsBuilder
.UseSqlServer(connectionString, options =>
{
options.EnableRetryOnFailure();
options.MigrationsHistoryTable(GladMigrationsHistory, EntityBase.SchemaName);
})
.ConfigureWarnings(warnings => warnings.Throw(RelationalEventId.QueryClientEvaluationWarning));
}
}
DbContextOptionsBuilder<GladContext>
用于_IDesignTimeDbContextFactory<GladContext>
你能告诉我如何使用AddContext
来配置GladContext
或如何DbContextOptionsBuilder
从 aDbContextOptionsBuilder<GladContext>
或其他方式构造 a 吗?
解决方案
它的配置部分是对 IServiceCollection.AddDbContext() 的覆盖。
因此,当您调用 AddDbContext 时,只需将您的选项添加到括号中,如下所示:
var connectionString = "CONNECTION-STRING-HERE";
services.AddDbContext<MyContext>(o => o
.UseSqlServer(connectionString)
.UseQueryTrackingBehavior(true)
.EnableSensitiveDataLogging(true));
public class MyContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public MyContext(DbContextOptions<MyContext> options) : base(options)
{
}
}
推荐阅读
- javascript - 如何使用java脚本将单词向右对齐
- javascript - 按照先前定义的路径反应路由
- json - 使用 json 字符串值和模式创建 pyspark 数据框
- vim - 采购 .vimrc 时出错
- python - Python cantools 创建 dbc 文件
- python - Matplotlib 中 2d 切片的 3d 图上功能下方的填充区域
- python - 转义 JSON Python 3,烧瓶
- bash - jenkins 重启远程服务代理后卡住了
- angular - NX Angular Storybook 未构建
- ansible - 如何比较不同文件上的变量ansible