【问题标题】:Global ConnectionString in .net Core WebApi.net Core WebApi 中的全局 ConnectionString
【发布时间】:2018-10-23 23:10:24
【问题描述】:

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

【问题讨论】:

  • 没有 app.config 但 app.json :-) docs.microsoft.com/en-us/ef/core/miscellaneous/…
  • 感谢您的回复@LaurentLequenne。我想学习的主要是使用 DbContextOptions 是最好的方法还是有更好的方法?
  • 如果这是一个类库,您应该通过依赖注入方式将配置的注入留给库的使用者,而不是将其作为一个实施细节
  • 非常感谢您的回答和建议@MartinCostello

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


【解决方案1】:

您将创建一个appsettings.json 文件,该文件将声明一个或多个连接。

{
     "ConnectionStrings": {
          dbExampleSystemConnection: "...",
          dbSampleSystemConnection: "..."
     }
}

appsettings.json 中定义连接后,您需要构建配置并在服务集合中配置实体框架以构建您的服务提供者。要添加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 容器。

【讨论】:

  • 谢谢@Greg。我会尝试这种方法。
猜你喜欢
  • 2020-09-23
  • 2020-10-21
  • 1970-01-01
  • 2016-12-14
  • 2011-07-20
  • 2020-08-16
  • 2018-12-11
  • 2021-06-30
  • 1970-01-01
相关资源
最近更新 更多