這個訪問層的代碼實際上是園子里某個前輩的,本人只是覺得好使,記錄了下來。 本訪問層需要通過Nuget安裝EntityFramework Core,不過個人認為EF 6同樣可以使用。 搭配資料庫,最好是Sql Server(微軟支持,你懂的) 下麵貼代碼 先是IRepository.cs 然後是實現 ...
這個訪問層的代碼實際上是園子里某個前輩的,本人只是覺得好使,記錄了下來。
本訪問層需要通過Nuget安裝EntityFramework Core,不過個人認為EF 6同樣可以使用。
搭配資料庫,最好是Sql Server(微軟支持,你懂的)
下麵貼代碼
先是IRepository.cs
public interface IRepository:IDisposable {
//獲取一個表的IQuerable介面查詢 IQueryable<T> All<T>() where T : class;
//插入一條記錄 void Insert<T>(T entity) where T : class;
//根據條件,獲得一條記錄 T Get<T>(Expression<Func<T, bool>> conditions) where T : class;
//傳入一個前面獲得的T對象,修改記錄 void Update<T>(T entity) where T : class;
//刪除一條記錄 void Delete<T>(T entity) where T : class;
//保存所有更改 int SaveChanges(); }
然後是實現 Repository.cs
public class Repository:IRepository { private DbContext context; public Repository(DbContext dbcontext) { context = dbcontext; } public IQueryable<T> All<T>() where T : class { return context.Set<T>().AsNoTracking(); } public void Insert<T>(T entity) where T : class { context.Set<T>().Add(entity); } public T Get<T>(Expression<Func<T, bool>> conditions) where T : class { return All<T>().FirstOrDefault(conditions); } public void Update<T>(T entity) where T : class { var entry = context.Entry(entity); if (entry.State == EntityState.Detached) { context.Set<T>().Attach(entity); } entry.State = EntityState.Modified; } public void Delete<T>(T entity) where T : class { var entry = context.Entry(entity); if (entry.State == EntityState.Detached) { context.Set<T>().Attach(entity); } entry.State = EntityState.Deleted; } public int SaveChanges() { return context.SaveChanges(); } public void Dispose() { context.Dispose(); } }
具體的使用:
可以寫一個DbFactory方法,用來生成一個資料庫連接(對象)
public class DbFactory { //這裡可能會有資料庫連接串什麼的,具體情況具體應用 public static IRepository Create() { return new Repository(new DbFactory().DbContext); } }
在業務邏輯層,我們可以
using(var db = DbFactory.Create()) { // 這裡可以是增刪改的代碼, // 例如db.Insert<User>(user); db.Insert<UserOther>(uo);
// 可以任意跨表,EntityFramework 自帶事務,最後SaveChanges會一併處理
int result = db.SaveChanges(); //SaveChanges()會返回一個更改數字,所以可以用一個int類型的數字來查看 結果。 }