使用EF Core的核心是DbContext,通過實例化DbContext對象來操作數據庫。本文首先介紹實例化DbContext的2種方式,接着實現對數據表的增刪改查,代碼環境是VS2019+ EF Core5。
一 控制器中實例化
(1)創建實體Model,如下所示。PartItemInfo表示產品零件的物料信息。
/// <summary> /// 零件物料信息表 /// </summary> public class PartItemInfo { public int Id { get; set; } public string ItemCode { get; set; } public string ItemName { get; set; } public string ItemStandards { get; set; } public string ItemBrand { get; set; } public string DesignChartNumber { get; set; } public DateTime CreateTime { get; set; } public string CreateUser { get; set; } public DateTime UpdateTime { get; set; } public string UpdateUser { get; set; } public bool IsDelete { get; set; } public DateTime? DeleteTime { get; set; } public string DeleteUser { get; set; } }
(2)創建自己的DbContext,它從DbContext繼承,如下所示。所有自定義的上下文對象都要繼承DbContext,在ScmcDbContext中顯示調用父類構造函數完成初始化。
接着增加DbSet<EntityModel>對象,有多少實體就增加多少個DbSet,后續操作數據庫都會使用DbSet對象。
這里有大神通過反射實現自動創建DbSet對象的功能。這樣就可以只增加Model,而不用手動增加DbSet對象了。
public class ScmsDbContext:DbContext { public ScmsDbContext(DbContextOptions<ScmsDbContext> options) : base(options) { } public DbSet<PartItemInfo> PartItemInfo { get; set; } }
(3)在startup.cs中添加ScmsDbContext的服務。
public void ConfigureServices(IServiceCollection services) { services.AddControllersWithViews(); //添加服務 services.AddDbContext<ScmsDbContext>(s=>s.UseSqlServer("name=ConnectionStrings:SCMS")); }
(4)在控制器中通過構造函數初始化ScmsDbContext。
private readonly ScmsDbContext _db; public PartItemController(ScmsDbContext scmsDbContext) { _db = scmsDbContext; }
(5)完成上面的步驟后,即可操作數據庫。如下所示代碼新增了一行PartItemInfo表的數據。
public IActionResult Index() { PartItemInfo partItemInfo = new PartItemInfo(); partItemInfo.CreateTime = DateTime.Now; partItemInfo.CreateUser = "張三"; partItemInfo.UpdateTime = DateTime.Now; partItemInfo.UpdateUser = "張三"; partItemInfo.ItemCode = "code-01"; _db.PartItemInfo.Add(partItemInfo); _db.SaveChanges(); return View(); }
二 重寫OnConfiguring
(1)實體PartItemInfo和上面一樣,但是不再通過控制器中的構造函數實例化,而是重寫DbContext中的OnConfiguring方法。
public class ScmsDbContext:DbContext { protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Data Source=localhost; Initial Catalog=SCMS; User Id=sa; Password=123;"); } public DbSet<PartItemInfo> PartItemInfo { get; set; } }
(2)接着只需要使用new關鍵字,即可使用數據庫上下文對象。要注意習慣性的加上using。
public IActionResult Index() { PartItemInfo partItemInfo = new PartItemInfo(); partItemInfo.ItemCode = "code=02"; partItemInfo.CreateTime = DateTime.Now; partItemInfo.CreateUser = "張三"; partItemInfo.UpdateTime = DateTime.Now; partItemInfo.UpdateUser = "張三"; using (ScmsDbContext scmsDbContext=new ScmsDbContext()) { scmsDbContext.Add(partItemInfo); scmsDbContext.SaveChanges(); } return View(); }
三 EF Core實現增刪改查
這部分和EF一樣,沒什么區別,唯一要注意的是實體model的內存狀態。這樣就可以使用EF Core來操作數據庫啦~
using (ScmsDbContext scmsDbContext = new ScmsDbContext()) { //新增 scmsDbContext.Add(partItemInfo); scmsDbContext.SaveChanges(); //刪除 scmsDbContext.Remove(partItemInfo); scmsDbContext.SaveChanges(); //查詢 List<PartItemInfo> list = scmsDbContext.PartItemInfo.Where(s=>s.IsDelete == false).ToList(); //修改 list[0].ItemCode = "code-03"; scmsDbContext.SaveChanges(); }