vie*_*ule 5 c# entity-framework entity-framework-core .net-core
我正在尝试ApiAuthorizationDbContext
从另一个 .NET Core 项目添加迁移,但无法从设计时实例化它,因为我不知道如何获取第二个参数IOptions<OperationalStoreOptions>
。
这是我的 DbContext 构造函数(它继承了我ApiAuthorizationDbContext
接受 TUser、TRole、TKey 的自定义)
public class ApplicationDbContext : ApiAuthorizationDbContext<ApplicationUser, ApplicationRole, Guid>
{
public ApplicationDbContext (DbContextOptions options, IOptions<OperationalStoreOptions> operationalStoreOptions)
: base(options, operationalStoreOptions)
{
}
Run Code Online (Sandbox Code Playgroud)
这是我的 DesignTimeDbContextFactory
public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<KontestDbContext>
{
public ApplicationDbContext CreateDbContext(string[] args)
{
IConfiguration configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json").Build();
var builder = new DbContextOptionsBuilder<ApplicationDbContext>();
var connectionString = configuration.GetConnectionString("DefaultConnection");
builder.UseSqlServer(connectionString);
return new ApplicationDbContext(builder.Options, ????); <--- how to resolve the IOptions<OperationStoreOptions> here ??
}
}
Run Code Online (Sandbox Code Playgroud)
我在 GitHub 中找到了这个问题的答案,但仍然无法找到解决此参数的方法。
我也尝试将 IOptions<> 注入构造函数,但是在添加迁移时,它抛出一个异常,即找不到 DesignTimeDbContextFactory 的无参数构造函数
有人可以通过这个给我一个提示,我对 .NET Core / EF Core 很陌生,如果有人可以提供帮助,我会非常感谢!
(我使用 .NET Core 3.0 和 Entity Framework Core)
创建OperationalStoreOptionsMigrations继承IOptions并通过OperationalStoreOptionsMigrations对象。看我的回答。
创建OperationalStoreOptionsMigrations方法。
public class OperationalStoreOptionsMigrations :
IOptions<OperationalStoreOptions>
{
public OperationalStoreOptions Value => new OperationalStoreOptions()
{
DeviceFlowCodes = new TableConfiguration("DeviceCodes"),
EnableTokenCleanup = false,
PersistedGrants = new TableConfiguration("PersistedGrants"),
TokenCleanupBatchSize = 100,
TokenCleanupInterval = 3600,
};
}
Run Code Online (Sandbox Code Playgroud)更改DesignTimeDbContextFactory
public class DesignTimeDbContextFactory :
IDesignTimeDbContextFactory<KontestDbContext>
{
public ApplicationDbContext CreateDbContext(string[] args)
{
IConfiguration configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json").Build();
var builder = new DbContextOptionsBuilder<ApplicationDbContext>();
var connectionString =
configuration.GetConnectionString("DefaultConnection");
builder.UseSqlServer(connectionString);
return new ApplicationDbContext(builder.Options, new OperationalStoreOptionsMigrations());
}
}
Run Code Online (Sandbox Code Playgroud)For*_*a12 -3
将您IOptions<OprerationalStoreOption>
作为构造函数中的参数传递,然后您可以在任何需要的地方使用它。IOptions
然后在容器中注册服务DI
。像这样的东西
public ApplicationDbContext CreateDbContext(string[] args, Options<OperationStoreOptions> optionsBuilder)
{
IConfiguration configuration = new ConfigurationBuilder()
return new ApplicationDbContext(builder.Options, optionsBuilder);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1600 次 |
最近记录: |