您现在的位置是:网站首页> 编程资料编程资料
.NET Core配置连接字符串和获取数据库上下文实例_实用技巧_
2023-05-24
565人已围观
简介 .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 options) : base(options) { } public DbSet Users { get; set; } public DbSet 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(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 { /// /// 配置各种服务 /// /// public static IServiceProvider ServiceProvider() { IServiceCollection services = new ServiceCollection(); services.AddDbContext(options => options.UseSqlite("filename=Database.db")); var serviceProvider = services.BuildServiceProvider(); return serviceProvider; } /// /// 获取上下文 /// /// /// public static DataContext GetContext(IServiceProvider services) { var sqliteContext = services.GetService(); return sqliteContext; } /// /// 获取上下文 /// public static DataContext GetContext() { var services = ServiceProvider(); var sqliteContext = services.GetService(); return sqliteContext; } } 需要使用时可以这样获取上下文
var context = ContextService.GetContext(); var list = context.Users.ToList();
无签名上下文 OnConfigure 配置
上面两个示例中,连接字符串都是使用 Action来配置的。
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 的构造函数,建议使用泛型形式。
构造函数示例:
public DataContext(DbContextOptionsoptions) : base(options) { }
具有此构造函数,则可以通过外界注入配置,例如
services.AddDbContext(options=>options.UseSqlite("filename=Database.db"));
如果你不使用注入(Microsoft.Extensions.DependencyInjection)或者第三方 ioc 工具,那么无法使用上面这种形式。
不过可以自己 new,自己传递配置对象,
var optionsBuilder = new DbContextOptionsBuilder(); optionsBuilder.UseSqlite("filename=Database.db"); DataContext context = new DataContext(optionsBuilder.Options); var list = context.Users.ToList();
到此这篇关于.NET Core配置连接字符串和获取数据库上下文实例的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。
相关内容
- ASP.NET CORE基础教程_基础应用_
- .Net使用SuperSocket框架实现WebSocket前端_实用技巧_
- ASP.NET Core 3.0轻量级角色API控制授权库_实用技巧_
- .Net使用SuperSocket框架实现WebSocket后端_实用技巧_
- .Net Core部署Docker容器_基础应用_
- ASP.NET Core使用JWT自定义角色并实现策略授权需要的接口_实用技巧_
- .NET Core使用EF生成数据库出错的解决方法_实用技巧_
- .NET Core跨平台串口通讯使用SerialPortStream基础类库问题解决_实用技巧_
- .Net Core应用增强型跨平台串口类库CustomSerialPort()详解_实用技巧_
- .Net Core跨平台应用开发串口篇HelloArm_实用技巧_
