我需要在两个地方使用相同的<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script>
<select class="form-control select2" style="width: 100%;" id="drpSearchSubjCode">
<option></option>
<option value="AL">Alabama</option>
<option value="WY">Wyoming</option>
</select>
<button id="add">Add new option</button>
<button id="sel">Select option</button>
。在我的网站项目ConnectionString
中,其中包含来自Insig.Api
的{{1}}和另一个项目类库ConnectionString
,其中是我的数据库上下文。
Insig.Api - Startup.cs
appsettings.json
Insig.Infrastructure - InsigContext.cs
Insing.Infrastructure
正如您所见,由于迁移(来自Code First方法),上下文中也需要public class Startup
{
public IConfiguration Configuration { get; }
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddSingleton(Configuration);
services.AddDbContext<InsigContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}
}
。
编辑 - 以下代码不起作用。当我尝试public class InsigContext : DbContext, IDesignTimeDbContextFactory<InsigContext>
{
public InsigContext() { }
public InsigContext(DbContextOptions<InsigContext> options) : base(options) { }
public DbSet<Sample> Samples { get; set; }
public InsigContext CreateDbContext(string[] args)
{
var builder = new DbContextOptionsBuilder<InsigContext>();
builder.UseSqlServer("Data Source=.\\SQLEXPRESS;Initial Catalog=InsigDB;Integrated Security=True;MultipleActiveResultSets=True");
// Here I would like to use ConnectionString instead of raw string.
return new InsigContext(builder.Options);
}
}
时,我收到错误:ConnectionString
Add-Migration Init
答案 0 :(得分:1)
我决定提供其他信息for my comment。
就像作者一样,我面临着将连接字符串从API项目传递到Data项目的相同问题。我决定使用连接字符串指定全局设置,并将它们链接到两个项目。我一步一步去了through this article。结果,我设法在两个地方使用了连接字符串。
答案 1 :(得分:0)
您可以将IConfiguration
注入InsigContext
构造函数并使用它来获取连接字符串
private readonly string connectionString;
public InsigContext(DbContextOptions<InsigContext> options,IConfiguration configuration)
: base(options)
{
this.connectionString = configuration.GetSection("ConnectionStrings:DefaultConnection")
.Value;
}
// you can use this.connectionString now
{p> IConfiguration
在Microsoft.Extensions.Configuration
命名空间中定义。所以你可能想在你的班级图书馆中添加对它的引用。
如果要在另一个方法中访问IConfiguration
对象,请创建一个局部变量并在构造函数中设置它
private readonly IConfiguration configuration;
public InsigContext(IConfiguration configuration)
{
this.configuration = configuration;
}
public void CreateDbContext(string[] args)
{
// you can use this.configuration here as needed or get conn string
}
不需要多个构造函数。将一个构造函数保留在注入所需依赖项的位置。
答案 2 :(得分:-1)
您应该使用依赖注入在其他项目中注入IConfiguration接口。像这样:
private readonly IConfiguration _config;
public InsigContext(IConfiguration config) {
_config = config;
}
然后你可以使用_config.GetConnectionString("DefaultConnection");
方法获取连接字符串。