.Net Core和EntityFrameworkCore

时间:2018-04-18 09:44:35

标签: c# .net-core entity-framework-core unit-of-work

我正在努力学习.Net核心。

我有两个项目:

  1. .Net Core Web api项目
  2. DLL .NetCore项目包含我的工作单元(实体框架)
  3. 我的问题:

    1. 如何从appsettings.json传递连接字符串 到我的DLL

      我在startup.cs配置中但我不知道如何使用它来访问我的appsettings.json

      public Startup(IConfiguration configuration)
      {
          Configuration = configuration;
      }
      

      startup.cs中有 services.AddDbContext

       
        services.AddDbContext(options => 
           options.UseSqlServer(
           Configuration.GetConnectionString("DefaultConnection")))

      但我不想使用 services.AddDbContext ,因为它是一对实体框架,如果我必须更改为其他ORM,我必须更改 这段代码也是。

    2. 其他问题如何解密连接的责任 字符串。

      • a:webapi必须解密到连接字符串并传递给DLL (工作单位)

      • b:或工作单元必须解密连接字符串

    3. 在我有另一个项目(即桌面应用程序)的情况下如何         使用DLL(工作单元)我还要把连接         在桌面应用程序的appsettings中的字符串? (就如         那种重复? )

3 个答案:

答案 0 :(得分:4)

  

我不想使用services.AddDbContext,因为它是一对实体框架

所以你需要做的是在你的EF项目中创建一个包含这个调用的扩展方法,这样EF对EF项目的依赖就像下面一样:

public static IServiceCollection AddDatabase<TContext>( this IServiceCollection serviceCollection, Action<DbContextOptionsBuilder> optionsAction, string connectionString)
{
    options.UseSqlServer(connectionString))
}

然后从您的启动代码中调用它:

services.AddDatabase(Configuration.GetConnectionString("DefaultConnection"));

这将解决您的依赖问题。

关于2:,请参阅此处:Encrypted Configuration in ASP.NET Core

关于3:然后其他项目需要调用AddDatabase方法并传入连接字符串,因此EF项目永远不会知道从哪里获取它,总是提供它。

答案 1 :(得分:0)

你可以这样做:

public BooksContext(string connectionString): this(GetOptions(connectionString))
{ }

private static DbContextOptions GetOptions(string connectionString)
{
    return SqlServerDbContextOptionsExtensions.UseSqlServer(new DbContextOptionsBuilder(), connectionString).Options;
}

答案 2 :(得分:0)

您可以像这样获取Stratup.cs文件。

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;


private readonly IConfigurationRoot _appConfiguration;
private readonly IHostingEnvironment _hostingEnvironment;

public Startup(IHostingEnvironment env)
{
    _hostingEnvironment = env;
    _appConfiguration = env.GetAppConfiguration();
}

获取ConnectionString的代码:

string connectionString = _appConfiguration["ConnectionStrings:Default"];

<强> appsettings.json

{
  "ConnectionStrings": {
    "Default": "Server=YourDBAddress; Database=YourDB; Trusted_Connection=True;"
  }
  ...
}

对于其他观点,您可以参考@Jamie Rees的答案。