您现在的位置是:网站首页> 编程资料编程资料

.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 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 的构造函数,建议使用泛型形式。

构造函数示例:

 public DataContext(DbContextOptions options) : 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配置连接字符串和获取数据库上下文实例的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持。

-六神源码网