是否有可能“在飞行中”在外部类/方法中添加数据库上下文?当我运行应用程序时,没有任何连接字符串,所以我需要在输入一些信息(server,dbname,ect)后生成一个数据库
答案 0 :(得分:6)
一种方法是使用工厂模式,即创建将用于创建上下文的新实例的服务。
以下是一个示例,它不是最终解决方案,您需要根据自己的需要进行调整,但它应该让您了解该技术:
public interface IDbContextFactory
{
DbContext CreateDbContext(string connectionString);
}
public class DbContextFactory : IDbContextFactory
{
public DbContext CreateDbContext(string connectionString)
{
return new DbContext(connectionString);
}
}
然后在asp.net核心中,您可以注册上下文工厂并将其注入您的控制器:
services.AddSingleton<IDbContextFactory, DbContextFactory>();
public class SomeController
{
private IDbContextFactory contextFactory;
public SomeController(IDbContextFactory contextFactory)
{
this.contextFactory = contextFactory;
}
public IActionResult Index()
{
using(var db = contextFactory.CreateDbContext("Your connection string")) {
//Get some data
}
return View();
}
}
您可以将工厂模式与工作单元和/或存储库模式结合起来,以更好地分离关注点并确保始终处理上下文等,而不是创建DbContext ...
答案 1 :(得分:0)
使用new YourContext(new DbContextOptionsBuilder<YourContext>().Use...().Options)