我在尝试使用实体框架核心获取 DbContext 对象中 DbSet 的信息时遇到错误。
我的 DbContext 对象看起来像这样:
public class CatalogueContext : DbContext
{
public DbSet<ConnectorCatalogueItemConv> CatalogueItemConvs { get; set; }
public CatalogueContext(DbContextOptions<CatalogueContext> options)
: base(options)
{
}
public CatalogueContext()
{
}
}
Run Code Online (Sandbox Code Playgroud)
我试图通过调用一个接收泛型类型 T 的方法来实例化上下文,该类型可能是 DbContext 的子类:
public T GetContext<T>() where T: DbContext, new()
{
var optionsBuilder = new DbContextOptionsBuilder<T>();
var connectionString = Configuration.GetConnectionString(ExternalTablesKey);
optionsBuilder.UseSqlServer(connectionString);
return Activator.CreateInstance(typeof(T), optionsBuilder.Options) as T;
}
Run Code Online (Sandbox Code Playgroud)
通过使用 Microsoft.Extensions.Configuration 正确获取连接字符串,因此问题不存在。
最后,我调用此方法并尝试获取声明如下的 DbSet 上的任何记录:
public void SomeMethod()
{
using (var db = this.GetContext<CatalogueContext>())
{
var val …Run Code Online (Sandbox Code Playgroud) 我正在尝试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)
我在 …
我想从控制器配置连接字符串,但我没有找到任何函数来执行此操作。
我有:
public class tstController : Controller
{
private readonly contextTst _context;
public tstController(contextTst context)
{
_context = context;
_context.Database.**????**
}
}
Run Code Online (Sandbox Code Playgroud)
这是可能的?
多谢!