c# - 无法创建 MyDbContext 类型的对象
问题描述
我正在MyDbContext
使用 Autofac 进行注册,它工作正常,但是当我尝试使用任何 ef 迁移命令(例如,Add-Migration -Name my-migration
)时,我收到错误:
无法创建“MyDbContext”类型的对象。有关设计时支持的不同模式,请参阅https://go.microsoft.com/fwlink/?linkid=851728
如果我注册MyDbContext
该IServiceCollection
错误就会消失。我的 Autofac 配置是:
builder.Register(
_ =>
{
var optionsBuilder = new DbContextOptionsBuilder<MyDbContext>();
var conn = configuration.GetConnectionString(connName);
var dbConnection = new NpgsqlConnection(conn);
var password = configuration.GetPassword(connName);
dbConnection.ProvidePasswordCallback =
(host, port, database, username) => password;
optionsBuilder.UseNpgsql(dbConnection);
return new MyDbContext(optionsBuilder.Options);
})
.AsSelf()
.InstancePerLifetimeScope();
根据微软的文档:
这些工具首先尝试通过调用 Program.CreateHostBuilder()、调用 Build() 来获取服务提供者,然后访问 Services 属性。
我调试了我的应用程序,并且能够MyDbContext
通过IHost
调用IHostBuilder.Build()
. 我错过了什么,我需要做其他事情吗?
提前致谢。
解决方案
您是否尝试过这里提到的解决方案。
builder.Register(componentContext =>
{
var serviceProvider = componentContext.Resolve<IServiceProvider>();
var configuration = componentContext.Resolve<IConfiguration>();
var dbContextOptions = new DbContextOptions<TContext>(new Dictionary<Type, IDbContextOptionsExtension>());
var optionsBuilder = new DbContextOptionsBuilder<TContext>(dbContextOptions)
.UseApplicationServiceProvider(serviceProvider)
.UseSqlServer(configuration.GetConnectionString("MyConnectionString"),
serverOptions => serverOptions.EnableRetryOnFailure(5, TimeSpan.FromSeconds(30), null));
return optionsBuilder.Options;
}).As<DbContextOptions<TContext>>()
.InstancePerLifetimeScope();
builder.Register(context => context.Resolve<DbContextOptions<TContext>>())
.As<DbContextOptions>()
.InstancePerLifetimeScope();
builder.RegisterType<TContext>()
.AsSelf()
.InstancePerLifetimeScope();
推荐阅读
- kubernetes - GKE - 无法使 cuda 与 pytorch 一起工作
- user-interface - 如何更改搜索/替换中选项的颜色?
- javascript - 如何使用标签链接内的图像提示php echo内的删除确认
- python - 在循环中使用和序列来计算值
- react-native - 错误路由器的组件必须是反应组件
- javascript - 根据位置/浏览器语言设置更改语言以与 i18next 做出反应
- ionic-framework - AWS Amplify AppSync 订阅无法正常工作
- python - 将 Json 转换为 CSV
- azure - 通过 terraform 进行 Elasticsearch 升级的正确方法
- javascript - 如何调用函数来运行特定代码?