網站首頁 編程語言 正文
假設數據庫就兩個表: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();
原文鏈接:https://www.cnblogs.com/whuanle/p/11908663.html
相關推薦
- 2022-08-02 python機器學習Logistic回歸原理推導_python
- 2022-02-23 Eclipse中語句前后都出現奇怪的符號
- 2024-01-06 TCP的三次握手和四次揮手
- 2022-04-06 詳解pandas中缺失數據處理的函數_python
- 2023-04-26 C語言函數聲明以及函數原型超詳細講解示例_C 語言
- 2023-03-01 GoLang中Strconv庫有哪些常用方法_Golang
- 2022-12-12 Flutter手機權限檢查與申請實現方法詳解_Android
- 2022-11-16 Python操作csv文件之csv.writer()和csv.DictWriter()方法的基本使用
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支