1. 程式人生 > 實用技巧 >EF 用到的兩個類

EF 用到的兩個類

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;
        }
    }
}