我使用的是.net core 2.0,其结构基本上是这样的:我有 20个Web Api项目和一个类库(DbContext)项目。 Web Api项目具有Startup.cs
。但是类库还没有Startup.cs
。我应该在哪里写连接字符串?因为类库没有app.config
或Startup.cs
。如果我使用API的Startup.cs
进行编写,则必须编写20次connectionString。这是不可接受的。我使用了DbContextOptions
,如下所示,但是我不确定,这是最好的方法。最好的方法是什么?
public class MyDbContext : DbContext
{
private readonly IAuditHelper auditHelper;
public MyDbContext(DbContextOptions<MyDbContext> options, IAuditHelper auditHelper)
: base(GetOptions())
{
this.auditHelper = auditHelper;
}
private static DbContextOptions GetOptions()
{
return SqlServerDbContextOptionsExtensions.UseSqlServer(new DbContextOptionsBuilder(), "server=asdf; database=asdf; user id=asdf; password=asdf").Options;
}
public async Task<int> SaveChangesWithoutAuditAsync(CancellationToken cancellationToken = default(CancellationToken))
{
return (await base.SaveChangesAsync(true, cancellationToken));
}
}
答案 0 :(得分:1)
您将创建一个appsettings.json
文件,该文件将声明一个或多个连接。
{
"ConnectionStrings": {
dbExampleSystemConnection: "...",
dbSampleSystemConnection: "..."
}
}
在appsettings.json
中定义了连接之后,您需要构建配置,还需要在Service Collection内部配置Entity Framework以构建服务提供者。要添加appsettings.json
,您需要执行以下操作:
public static IConfiguration BuildConfigurationProvider() => new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", false, true)
.Build();
然后您需要创建服务集合,我扩展了我的内容,但本质上您需要以下内容:
public class ApplicationProvider
{
public ApplicationProvider() => Configuration = ApplicationConfigurationProvider.BuildConfigurationProvider();
public void StartApplication()
{
var serviceCollection = new ServiceCollection().AddSingleton(configuration => Configuration);
var serviceProvider = ApplicationServiceProvider.BuildServiceProvider(serviceCollection);
...
}
}
因此,您已经定义并添加了配置,因此可以访问已构建的配置。但是,为了使您能够全局定义,您需要在“服务集合”中执行以下操作:
services.AddDbContext<BloggingContext>(options => options.UseSqlite(Configuration.GetConnectionString("dbSampleSystemConnection"));
在控制台应用程序中,我创建了一系列提供程序,但是您应该已经在Web Api项目中定义了很多提供程序。我的控制台应用程序使用Core的默认DI容器。