EF 用到的兩個類
阿新 • • 發佈:2020-12-27
DAL類
using System; using System.Collections.Generic; using System.Data.Entity; using System.Data.Entity.Infrastructure; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Text; using System.Threading.Tasks; using HRMS.Models; namespace HRMS.SQLServerDAL { /// <summary> /// T為引用型別,且有個無參的建構函式 /// </summary> /// <typeparam name="T"></typeparam> public class BaseDAL<T> where T : class, new() { static Entities db = new Entities(); public int Insert(T model) { db.Set<T>().Attach(model); db.Entry(model).State = EntityState.Added; return db.SaveChanges(); } public int DeleteByPrimaryKey(T model) { db.Set<T>().Attach(model); db.Entry(model).State = EntityState.Deleted; return db.SaveChanges(); } public int UpdateByPrimaryKey(T model) { db.Set<T>().Attach(model); db.Entry(model).State = EntityState.Modified; return db.SaveChanges(); } public int InsertRange(List<T> list) { db.Set<T>().AddRange(list); return db.SaveChanges(); } public int DeleteRange(List<T> list) { db.Set<T>().RemoveRange(list); return db.SaveChanges(); } public List<T> GetAllList() { return db.Set<T>().Select(p => p).ToList(); } /// <summary> /// 分頁查詢 /// </summary> /// <typeparam name="TKey">排序的欄位的型別</typeparam> /// <param name="orderLambda">按上面方式排序,升序還是降序</param> /// <param name="whereLambda">分頁的Where條件</param> /// <param name="pagesize">每頁多少條資料</param> /// <param name="pageIndex">當前第幾頁</param> /// <returns></returns> public List<T> GetPageList<TKey>(Expression<Func<T, TKey>> orderLambda, Expression<Func<T, bool>> whereLambda, int pagesize, int pageIndex) { return db.Set<T>().Where(whereLambda) .OrderBy(orderLambda) .Skip((pageIndex - 1) * pagesize) .Take(pagesize) .Select(u => u).ToList(); } } }
BLL類
using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using HRMS.Models; using HRMS.SQLServerDAL; namespace HRMS.BLL { public class BaseBLL<T> where T : class, new() { BaseDAL<T> dal = new BaseDAL<T>(); public int Insert(T model) { return dal.Insert(model); } public int DeleteByPrimaryKey(T model) { return dal.DeleteByPrimaryKey(model); } public int UpdateByPrimaryKey(T model) { return dal.UpdateByPrimaryKey(model); } public int InsertRange(List<T> list) { return dal.InsertRange(list); } public int DeleteRange(List<T> list) { return dal.DeleteRange(list); } public List<T> GetAllList() { return dal.GetAllList(); } /// <summary> /// 分頁查詢 /// </summary> /// <typeparam name="TKey">排序的欄位的型別</typeparam> /// <param name="orderLambda">按上面方式排序,升序還是降序</param> /// <param name="whereLambda">分頁的Where條件</param> /// <param name="pagesize">每頁多少條資料</param> /// <param name="pageIndex">當前第幾頁</param> /// <returns></returns> public List<T> GetPageList<TKey>(Expression<Func<T, TKey>> orderLambda, Expression<Func<T, bool>> whereLambda, int pagesize, int pageIndex) { return dal.GetPageList(orderLambda, whereLambda, pagesize, pageIndex); } } }
主程式程式碼
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using HRMS.BLL; using HRMS.Models; namespace HRMS.WinUI { public partial class FrmMain : Form { BaseBLL<PD_Bank> bll = new BaseBLL<PD_Bank>(); public FrmMain() { InitializeComponent(); } private void btnAdd_Click(object sender, EventArgs e) { PD_Bank obj = new PD_Bank() { 人員編號 = "1" }; bll.Insert(obj); var list = bll.GetAllList(); gridControl1.DataSource = list; } private void btnModify_Click(object sender, EventArgs e) { var obj = (from c in bll.GetAllList() where c.人員編號.Equals("1") select c).FirstOrDefault(); obj.人員編號 = "2"; bll.UpdateByPrimaryKey(obj); var list = bll.GetAllList(); gridControl1.DataSource = list; } private void btnDel_Click(object sender, EventArgs e) { var obj = (from c in bll.GetAllList() where c.人員編號.Equals("2") select c).FirstOrDefault(); bll.DeleteByPrimaryKey(obj); var list = bll.GetAllList(); gridControl1.DataSource = list; } private void btnAddRange_Click(object sender, EventArgs e) { var list = bll.GetAllList(); bll.InsertRange(list); var listAll = bll.GetAllList(); gridControl1.DataSource = listAll; } private void btnDelRange_Click(object sender, EventArgs e) { var list = bll.GetAllList(); bll.DeleteRange(list); var listAll = bll.GetAllList(); gridControl1.DataSource = listAll; } } }