.net Core WebApi中的全局ConnectionString

时间:2018-10-23 14:33:00

标签: c# asp.net-core asp.net-core-webapi

我使用的是.net core 2.0,其结构基本上是这样的:我有 20个Web Api项目一个类库(DbContext)项目。 Web Api项目具有Startup.cs。但是类库还没有Startup.cs。我应该在哪里写连接字符串?因为类库没有app.configStartup.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));
    }
}

1 个答案:

答案 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容器。