如何在Entity Framework Core中将连接字符串传递给DBContext?

问题描述

是否可以在构造函数中将连接字符串配置/传递给DbContext

public partial class MyContext : DbContext
{
    public MyContext() { }
    public MyContext(DbContextOptions<MyContext> options) : base(options) { }
}

MyContext opt = new MyContext("con_str");

而不是对其进行硬编码:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UsesqlServer(
        @"Server=(localdb)\mssqllocaldb;Database=MyDB;Integrated Security=True");
}

我如何使用:

DbContextOptions<MyContext> opts;

以下答案:Pass connection string to code-first DbContext不起作用。

解决方法

Startup.cs

import numpy as np

from pymoo.algorithms.nsga2 import NSGA2
from pymoo.algorithms.so_genetic_algorithm import GA
from pymoo.factory import get_problem,G1,Problem
from pymoo.model.evaluator import Evaluator
from pymoo.model.population import Population
from pymoo.optimize import minimize


class YourProblem(Problem):

    def __init__(self,n_var=10):
        super().__init__(n_var=n_var,n_obj=1,n_constr=0,xl=-0,xu=1,type_var=np.double)

    def _evaluate(self,x,out,*args,**kwargs):
        out["F"] = np.sum(np.square(x - 0.5),axis=1)


problem = YourProblem()

# create initial data and set to the population object - for your this is your file
N = 300
X = np.random.random((N,problem.n_var))
F = np.random.random((N,problem.n_obj))
G = np.random.random((N,problem.n_constr))


class Constant(YourProblem):

    def _evaluate(self,**kwargs):
        out["F"] = F
        out["G"] = G


pop = Population().new("X",X)
Evaluator().eval(Constant(),pop)

algorithm = GA(pop_size=100,sampling=pop)

minimize(problem,algorithm,('n_gen',10),seed=1,verbose=True)

appsettings.json

services.AddDbContext<YourDbContext>(options =>
{
     options.UseSqlServer(Configuration.GetSection("YourConn").Value);
     options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
});

已编辑

YourDbContext.cs

"YourConn": "yourconnectionstring"

然后您就可以使用

public partial class MyContext : DbContext
{
    private string _conn = "";
    public MyContext(string conn) 
    { 
        _conn = conn;
    }
    public MyContext(DbContextOptions<MyContext> options) : base(options) { }
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
         optionsBuilder.UseSqlServer(_conn);
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...