C# .Net Core和EntityFrameworkCore
我正在努力学习.NETCore 我有两个项目:C# .Net Core和EntityFrameworkCore,c#,.net-core,entity-framework-core,unit-of-work,C#,.net Core,Entity Framework Core,Unit Of Work,我正在努力学习.NETCore 我有两个项目: .Net核心Web api项目 NetCore项目包含我的工作单元(实体框架) 我的问题是: 如何从appsettings.json传递连接字符串 到我的DLL 我有startup.cs配置,但我不知道如何使用它访问我的appsettings.json public Startup(IConfiguration configuration) { Configuration = configuration; } startup.cs中有se
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
startup.cs中有services.AddDbContext
但我不想使用services.AddDbContext,因为它是实体框架的一对,如果我必须更改为其他ORM,我必须更改
这段代码也是- 答:webapi必须解密到连接字符串并传递到DLL (工作单位)
- 或者工作单元必须解密连接字符串
您可以这样做:
public BooksContext(string connectionString): this(GetOptions(connectionString))
{ }
private static DbContextOptions GetOptions(string connectionString)
{
return SqlServerDbContextOptionsExtensions.UseSqlServer(new DbContextOptionsBuilder(), connectionString).Options;
}
您可以这样做:
public BooksContext(string connectionString): this(GetOptions(connectionString))
{ }
private static DbContextOptions GetOptions(string connectionString)
{
return SqlServerDbContextOptionsExtensions.UseSqlServer(new DbContextOptionsBuilder(), connectionString).Options;
}
我不想使用services.AddDbContext,因为它是一对实体框架
因此,您需要做的是在EF项目中创建一个扩展方法来包装此调用,以便对EF的依赖关系保持在EF项目中,如下所示:
public static IServiceCollection AddDatabase<TContext>( this IServiceCollection serviceCollection, Action<DbContextOptionsBuilder> optionsAction, string connectionString)
{
options.UseSqlServer(connectionString))
}
这将解决您的依赖性问题
关于第2条:参见此处:
关于3:那么其他项目将需要调用AddDatabase
方法并传入连接字符串,因此EF项目将永远不知道从何处获取它,它总是提供的
我不想使用services.AddDbContext,因为它是一对实体框架
因此,您需要做的是在EF项目中创建一个扩展方法来包装此调用,以便对EF的依赖关系保持在EF项目中,如下所示:
public static IServiceCollection AddDatabase<TContext>( this IServiceCollection serviceCollection, Action<DbContextOptionsBuilder> optionsAction, string connectionString)
{
options.UseSqlServer(connectionString))
}
这将解决您的依赖性问题
关于第2条:参见此处:
关于3:那么其他项目将需要调用
AddDatabase
方法并传入连接字符串,因此EF项目将永远不知道从何处获取它,它总是提供的。您可以像这样获取in 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();
}
获取连接字符串的代码:
string connectionString = _appConfiguration["ConnectionStrings:Default"];
appsettings.json
{
"ConnectionStrings": {
"Default": "Server=YourDBAddress; Database=YourDB; Trusted_Connection=True;"
}
...
}
关于其他方面,您可以参考@Jamie Rees的答案。您可以在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();
}
获取连接字符串的代码:
string connectionString = _appConfiguration["ConnectionStrings:Default"];
appsettings.json
{
"ConnectionStrings": {
"Default": "Server=YourDBAddress; Database=YourDB; Trusted_Connection=True;"
}
...
}
关于其他问题,您可以参考@Jamie Rees的答案。有什么更新吗?有什么更新吗?