.net core EF Dal层调用EF上下文
可以使用注入的方式
services.AddDbContext<EFContext>(optionsAction =>
{
var connectStr = Configuration.GetConnectionString("SqlServerConnection");
optionsAction.UseSqlServer(connectStr);
});
但是注入方式只能够在控制器中调用EF上下文。
如果想在其他层调用上下文则可以自己封装一个方法。
Nuget安装
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.FileExtensions
Microsoft.Extensions.Configuration.Json
这三个包
在上下文中重新定义一个无参的构造函数
public EFContext()
{
}
并添加一个调用appsettings.json的方法(startup中的Configuration调用IConfiguration接口,只能在startup中使用,因此我们要自己重新写一个,上文的包在此步用到)
public static IConfigurationRoot ConBuilder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json").Build();
重构一个方法来创建上下文,这样就可以在非控制器的部分调用EF上下文(只需要在DAL层New一个EFContext)
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
var DbSetting = ConBuilder.GetConnectionString("SqlServerConnection");
if (DbSetting == null)
{
throw new Exception("未配置数据库连接");
}
optionsBuilder.UseSqlServer(DbSetting, option => option.EnableRetryOnFailure());
}
}
浙公网安备 33010602011771号