1. 程式人生 > >【asp.net core 系列】8 實戰之 利用 EF Core 完成資料操作層的實現

【asp.net core 系列】8 實戰之 利用 EF Core 完成資料操作層的實現

# 0. 前言 通過前兩篇,我們建立了一個專案,並規定了一個基本的資料層訪問介面。這一篇,我們將以EF Core為例演示一下資料層訪問介面如何實現,以及實現中需要注意的地方。 # 1. 新增EF Core 先在資料層實現層引入 EF Core: ```bash cd Domain.Implements dotnet add package Microsoft.EntityFrameworkCore ``` 當前專案以SqlLite為例,所以再新增一個SqlLite資料庫驅動: ```bash dotnet add package Microsoft.EntityFrameworkCore.SQLite ``` 刪除 Domain.Implements 裡預設的Class1.cs 檔案,然後新增Insfrastructure目錄,建立一個 DefaultContext: ```c# using Microsoft.EntityFrameworkCore; namespace Domain.Implements.Insfrastructure { public class DefaultContext : DbContext { private string ConnectStr { get; } public DefaultContext(string connectStr) { ConnectStr = connectStr; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite(ConnectStr);//如果需要別的資料庫,在這裡進行修改 } } } ``` # 2. EF Core 批量載入模型 通常情況下,在使用ORM的時候,我們不希望過度的使用特性來標註實體類。因為如果後期需要變更ORM或者出現其他變動的時候,使用特性來標註實體類的話,會導致遷移變得複雜。而且大部分ORM框架的特性都依賴於框架本身,並非是統一的特性結構,這樣就會造成一個後果:本來應該是對呼叫方隱藏的實現就會被公開,而且在專案引用關係中容易出現迴圈引用。 所以,我在開發中會尋找是否支援配置類,如果使用配置類或者在ORM框架中設定對映關係,那麼就可以保證資料層的純淨,也能實現對呼叫方隱藏實現。 EF Core的配置類我們在《C# 資料訪問系列》中關於EF的文章中介紹過,這裡就不做過多介紹了(沒來得及看的小夥伴們不著急,後續會有一個簡單版的介紹)。 通常情況下,配置類我也會放在Domain.Implements專案中。現在我給大家介紹一下如何快速批量載入配置類: ```c# protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetAssembly(this.GetType()), t => t.GetInterfaces().Any(i => t.Name.Contains("IEntityTypeConfiguration"))); } ``` 現在版本的EF Core支援通過Assembly載入配置類,可以指定載入當前上下文類所在的Assembly,然後篩選實現介面中包含IEntityTypeConfiguration的類即可。 # 3. 使用EF Core實現資料操作 我們已經建立好了一個EF Context,那麼現在就帶領大家一起看一下,如何使用EF來實現 上一篇《「asp.net core」7 實戰之 資料訪問層定義》中介紹的資料訪問介面: 新建一個BaseRepository類,在Domain.Implements專案的Insfrastructure 目錄下: ```c# using Domain.Infrastructure; using Microsoft.EntityFrameworkCore; namespace Domain.Implements.Insfrastructure { public abstract class BaseRe