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