.NET Core配置连接字符串和获取数据库上下文实例

.NET Core配置连接字符串和获取数据库上下文实例

假设数据库就两个表:User、Blogs,

模型类如下

public class User { public int Id { get; set; } public string Name { get; set; } public string Number { get; set; } public string Email { get; set; } } public class Blogs { public int Id { get; set; } public string BolgName { get; set; } public string Url { get; set; } }

数据库上下文大致这样

public class DataContext : DbContext { public DataContext() { } public DataContext(DbContextOptions<DataContext> options) : base(options) { } public DbSet<User> Users { get; set; } public DbSet<Blog> Blogs { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { base.OnConfiguring(optionsBuilder); } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); } /* * 其他实现 */ } ASP.NET Core 注入

ASP.NET Core 的数据库注入是最为简单方便的了,在 ConfigureServices 配置即可。

services.AddDbContext<DataContext>(options=>options.UseSqlite("filename=Database.db"));

然后在控制器等地方使用,不需要什么多余代码。

[ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private readonly DataContext _context; public WeatherForecastController(DataContext context) { _context = context; } } .NET Core 注入

需要安装一个 Nuget 包

Microsoft.Extensions.DependencyInjection

创建一个类 ContextService,用来配置注入和获取上下文。

public class ContextService { /// <summary> /// 配置各种服务 /// </summary> /// <returns></returns> public static IServiceProvider ServiceProvider() { IServiceCollection services = new ServiceCollection(); services.AddDbContext<DataContext>(options => options.UseSqlite("filename=Database.db")); var serviceProvider = services.BuildServiceProvider(); return serviceProvider; } /// <summary> /// 获取上下文 /// </summary> /// <param name="services"></param> /// <returns></returns> public static DataContext GetContext(IServiceProvider services) { var sqliteContext = services.GetService<DataContext>(); return sqliteContext; } /// <summary> /// 获取上下文 /// </summary> public static DataContext GetContext() { var services = ServiceProvider(); var sqliteContext = services.GetService<DataContext>(); return sqliteContext; } }

需要使用时可以这样获取上下文

var context = ContextService.GetContext(); var list = context.Users.ToList(); 无签名上下文 OnConfigure 配置

上面两个示例中,连接字符串都是使用 Action<DbContextOptionsBuilder> optionsAction 来配置的。

options => options.UseSqlite("filename=Database.db")

我们可以直接在上下文的 OnConfigure 方法里,配置默认使用的连接字符串。

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { #if DEBUG optionsBuilder.UseSqlite("filename=Database.db"); #endif }

但是,极其不建议这样做,一般可能调试环境或为了方便在里面这样做。

这种情况是上下文存在一个无签名构造函数时,外界使用此构造函数直接实例化上下文。

var context = new DataContext(); var list = context.Users.ToList();

这种情况下,是直接实例化上下文,并且使用默认的连接字符串。

OnConfiguring会在无注入、也没有使用有签名构造函数时才会生效,或者描述为多种配置上下文方式中优先级最低。

有签名上下文构造函数和自己new一个上下文

上下文必须具有 DbContextOptions 或 DbContextOptions<T> 的构造函数,建议使用泛型形式。

构造函数示例:

public DataContext(DbContextOptions<DataContext> options) : base(options) { }

具有此构造函数,则可以通过外界注入配置,例如

services.AddDbContext<DataContext>(options=>options.UseSqlite("filename=Database.db"));

如果你不使用注入(Microsoft.Extensions.DependencyInjection)或者第三方 ioc 工具,那么无法使用上面这种形式。

不过可以自己 new,自己传递配置对象,

var optionsBuilder = new DbContextOptionsBuilder<DataContext>(); optionsBuilder.UseSqlite("filename=Database.db"); DataContext context = new DataContext(optionsBuilder.Options); var list = context.Users.ToList();

 到此这篇关于.NET Core配置连接字符串和获取数据库上下文实例的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持易知道(ezd.cc)。

推荐阅读

    学习写字楼新选择6000元主流配置

    学习写字楼新选择6000元主流配置,,这种配置需要考虑双核心的办公和娱乐平台,充分考虑办公室的办公需求和娱乐需求,以约6000元的预算和cost-e

    酷睿I7 配置

    酷睿I7 配置,配置,玩家国度啦华硕 Rampage II Extreme(3800元)如果米不够,也可以把Extreme改为Gene,不过是小板内存推荐金士顿6G DDR3 2000骇

    提高3A四核羿龙II游戏配置的性能

    提高3A四核羿龙II游戏配置的性能,,以节能环保为主题的IT产业,目前3A低端平台处理器、主板芯片组、独立开发卡性能突出,特别是在与AMD的处理

    opporeno8参数配置及价格

    opporeno8参数配置及价格,面部,亿元,Oppo的荣誉2020年1月4日,接近屏幕关闭传感器是否支持双卡:支持oppor11splus什么时候上市的Oppo R11S P

    查看配置:酷睿i3530集展示办公平台

    查看配置:酷睿i3530集展示办公平台,,由于时间和精力的关系,我们不可能对所有的配置进行评论,希望我们能理解,我希望我们的评论能在那些需要帮

    3500元超额值学生娱乐结构的优化配置

    3500元超额值学生娱乐结构的优化配置,,作为一个DIY的主流用户领域的学生,每个用户51学生攒机的高峰。因为学生用户没有稳定的收入来源,攒机

    字符库快捷键|字符串快捷键

    字符库快捷键|字符串快捷键,,1. 字符串快捷键1、单行注释单行注释是 #Mac的快捷键是 command+/windows的快捷键是 Ctrl + /2、多行注

    wps插入罗马字符页码|wps插入罗马数字

    wps插入罗马字符页码|wps插入罗马数字,罗马,页码,插入,字符,1.wps怎样插入罗马数字WPS里面插入罗马数字的方法(以WPS文字为例): (1)使用WPS里面