.NET?Core配置連接字符串和獲取數(shù)據(jù)庫(kù)上下文實(shí)例
假設(shè)數(shù)據(jù)庫(kù)就兩個(gè)表: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; } }
數(shù)據(jù)庫(kù)上下文大致這樣
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); } /* * 其他實(shí)現(xiàn) */ }
ASP.NET Core 注入
ASP.NET Core 的數(shù)據(jù)庫(kù)注入是最為簡(jiǎn)單方便的了,在 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 注入
需要安裝一個(gè) Nuget 包
Microsoft.Extensions.DependencyInjection
創(chuàng)建一個(gè)類 ContextService
,用來配置注入和獲取上下文。
public class ContextService { /// <summary> /// 配置各種服務(wù) /// </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; } }
需要使用時(shí)可以這樣獲取上下文
var context = ContextService.GetContext(); var list = context.Users.ToList();
無簽名上下文 OnConfigure 配置
上面兩個(gè)示例中,連接字符串都是使用 Action<DbContextOptionsBuilder> optionsAction
來配置的。
options => options.UseSqlite("filename=Database.db")
我們可以直接在上下文的 OnConfigure 方法里,配置默認(rèn)使用的連接字符串。
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { #if DEBUG optionsBuilder.UseSqlite("filename=Database.db"); #endif }
但是,極其不建議這樣做,一般可能調(diào)試環(huán)境或?yàn)榱朔奖阍诶锩孢@樣做。
這種情況是上下文存在一個(gè)無簽名構(gòu)造函數(shù)時(shí),外界使用此構(gòu)造函數(shù)直接實(shí)例化上下文。
var context = new DataContext(); var list = context.Users.ToList();
這種情況下,是直接實(shí)例化上下文,并且使用默認(rèn)的連接字符串。
OnConfiguring
會(huì)在無注入、也沒有使用有簽名構(gòu)造函數(shù)時(shí)才會(huì)生效,或者描述為多種配置上下文方式中優(yōu)先級(jí)最低。
有簽名上下文構(gòu)造函數(shù)和自己new一個(gè)上下文
上下文必須具有 DbContextOptions
或 DbContextOptions<T>
的構(gòu)造函數(shù),建議使用泛型形式。
構(gòu)造函數(shù)示例:
public DataContext(DbContextOptions<DataContext> options) : base(options) { }
具有此構(gòu)造函數(shù),則可以通過外界注入配置,例如
services.AddDbContext<DataContext>(options=>options.UseSqlite("filename=Database.db"));
如果你不使用注入(Microsoft.Extensions.DependencyInjection)或者第三方 ioc 工具,那么無法使用上面這種形式。
不過可以自己 new,自己傳遞配置對(duì)象,
var optionsBuilder = new DbContextOptionsBuilder<DataContext>(); optionsBuilder.UseSqlite("filename=Database.db"); DataContext context = new DataContext(optionsBuilder.Options); var list = context.Users.ToList();
到此這篇關(guān)于.NET Core配置連接字符串和獲取數(shù)據(jù)庫(kù)上下文實(shí)例的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- .NET Core使用EF生成數(shù)據(jù)庫(kù)出錯(cuò)的解決方法
- ASP.NET?Core使用EF?SQLite對(duì)數(shù)據(jù)庫(kù)增刪改查
- .Net Core 使用NLog記錄日志到文件和數(shù)據(jù)庫(kù)的操作方法
- Asp.Net Core中創(chuàng)建多DbContext并遷移到數(shù)據(jù)庫(kù)的步驟
- 在.NetCore(C#)中使用ODP.NET Core+Dapper操作Oracle數(shù)據(jù)庫(kù)
- .net core下配置訪問數(shù)據(jù)庫(kù)操作
- 在.NET Core類庫(kù)中使用EF Core遷移數(shù)據(jù)庫(kù)到SQL Server的方法
相關(guān)文章
.net任務(wù)調(diào)度框架FluentScheduler簡(jiǎn)介
這篇文章介紹了.net任務(wù)調(diào)度框架FluentScheduler,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07C# javaScript函數(shù)的相互調(diào)用
如何在JavaScript訪問C#函數(shù),如何在C#中訪問JavaScript的已有變量等實(shí)現(xiàn)方法2008-12-12.NET/ASP.NET Routing路由(深入解析路由系統(tǒng)架構(gòu)原理)
這篇文章主要介紹了.NET/ASP.NET Routing路由(深入解析路由系統(tǒng)架構(gòu)原理),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07在VS2009中集成自動(dòng)上傳nuget包到服務(wù)器的解決方案
這篇文章主要介紹了在VS2009中集成自動(dòng)上傳nuget包到服務(wù)器的解決方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06.Net語(yǔ)言Smobiler開發(fā)之如何在手機(jī)上實(shí)現(xiàn)表單設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了.Net語(yǔ)言APP開發(fā)平臺(tái),如何在手機(jī)上實(shí)現(xiàn)表單設(shè)計(jì)(Smobiler),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09Entity Framework中執(zhí)行sql語(yǔ)句
這篇文章介紹了Entity Framework中執(zhí)行sql語(yǔ)句的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03ASP.NET Core文件壓縮常見使用誤區(qū)(最佳實(shí)踐)
本文給大家分享ASP.NET Core文件壓縮常見的三種誤區(qū),就每種誤區(qū)給大家講解的非常詳細(xì),是項(xiàng)目實(shí)踐的最佳紀(jì)錄,對(duì)ASP.NET Core文件壓縮相關(guān)知識(shí)感興趣的朋友一起看看吧2021-05-05