91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET MVC5網站開發之如何實現數據存儲層功能

發布時間:2021-08-27 09:34:27 來源:億速云 閱讀:132 作者:小新 欄目:開發技術

這篇文章將為大家詳細講解有關ASP.NET MVC5網站開發之如何實現數據存儲層功能,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

數據存儲層在項目Ninesky.DataLibrary中實現,整個項目只有一個類Repository。

Repository中實現增刪改查詢等方法供業務邏輯層調用,主要功能如下圖:

ASP.NET MVC5網站開發之如何實現數據存儲層功能

具體步驟

一、添加實體框架的引用

ASP.NET MVC5網站開發之如何實現數據存儲層功能

1、打開解決方案,選擇項目Ninesky.DataLibrary,在引用上右鍵,選擇管理NuGet程序包。

ASP.NET MVC5網站開發之如何實現數據存儲層功能

在NuGet包管理器中的瀏覽標簽中點擊EntityFramework,點擊右側欄的安裝按鈕。

ASP.NET MVC5網站開發之如何實現數據存儲層功能

在搜索框輸入EntityFramework.zh-Hans,安裝假體中文資源包。

二、實現數據倉儲類

打開解決方案,選擇項目Ninesky.DataLibrary,將Class1.cs重命名為Repository.cs,在文檔頭添加using System.Data.Entity;將類名重命名為public class Repository。改為public class Repository<T> where T :class

1、DbContext屬性

在Repository類中添加如下代碼 public DbContext DbContext { get; set; }

2、構造函數

為類中添加夠高函數,可以直接傳遞DbContex。

public Repository()
    { }
    public Repository(DbContext dbContext)
    {
      DbContext = dbContext;
    }

3、查找實體方法Find

Find有一個重載。兩個方法分別可以根據ID和根據lamdba表達式查找實體。

/// <summary>
    /// 查找實體
    /// </summary>
    /// <param name="ID">實體主鍵值</param>
    /// <returns></returns>
    public T Find(int ID)
    {
      return DbContext.Set<T>().Find(ID);
    }

    /// <summary>
    /// 查找實體
    /// </summary>
    /// <param name="where">查詢Lambda表達式</param>
    /// <returns></returns>
    public T Find(Expression<Func<T,bool>> where)
    {
      return DbContext.Set<T>().SingleOrDefault(where);
    }

4、查找實體列表方法FindList

根據需要FindList進行多次重載

/// <summary>
    /// 查找實體列表
    /// </summary>
    /// <returns></returns>
    public IQueryable<T> FindList()
    {
      return DbContext.Set<T>();
    }

    /// <summary>
    /// 查找實體列表
    /// </summary>
    /// <typeparam name="TKey">排序建類型</typeparam>
    /// <param name="order">排序表達式</param>
    /// <param name="asc">是否正序</param>
    /// <returns></returns>
    public IQueryable<T> FindList<TKey>(Expression<Func<T, TKey>> order, bool asc)
    {
      return asc ? DbContext.Set<T>().OrderBy(order) : DbContext.Set<T>().OrderByDescending(order);
    }

    /// <summary>
    /// 查找實體列表
    /// </summary>
    /// <typeparam name="TKey">排序鍵類型</typeparam>
    /// <param name="order">排序鍵</param>
    /// <param name="asc">是否正序</param>
    /// <param name="number">獲取的記錄數量</param>
    /// <returns></returns>
    public IQueryable<T> FindList<TKey>(Expression<Func<T, TKey>> order, bool asc,int number)
    {
      return asc ? DbContext.Set<T>().OrderBy(order).Take(number) : DbContext.Set<T>().OrderByDescending(order).Take(number);
    }

    /// <summary>
    /// 查找實體列表
    /// </summary>
    /// <param name="where">查詢Lambda表達式</param>
    /// <returns></returns>
    public IQueryable<T> FindList(Expression<Func<T, bool>> where)
    {
      return DbContext.Set<T>().Where(where);
    }

    /// <summary>
    /// 查找實體列表
    /// </summary>
    /// <param name="where">查詢Lambda表達式</param>
    /// <param name="number">獲取的記錄數量</param>
    /// <returns></returns>
    public IQueryable<T> FindList(Expression<Func<T, bool>> where, int number)
    {
      return DbContext.Set<T>().Where(where).Take(number);
    }

    /// <summary>
    /// 查找實體列表
    /// </summary>
    /// <typeparam name="TKey">排序鍵類型</typeparam>
    /// <param name="where">查詢Lambda表達式</param>
    /// <param name="order">排序鍵</param>
    /// <param name="asc">是否正序</param>
    /// <returns></returns>
    public IQueryable<T> FindList<TKey>(Expression<Func<T, bool>> where, Expression<Func<T, TKey>> order, bool asc)
    {
      return asc ? DbContext.Set<T>().Where(where).OrderBy(order) : DbContext.Set<T>().Where(where).OrderByDescending(order);
    }

    /// <summary>
    /// 查找實體列表
    /// </summary>
    /// <typeparam name="TKey">排序鍵類型</typeparam>
    /// <param name="where">查詢Lambda表達式</param>
    /// <param name="order">排序鍵</param>
    /// <param name="asc">是否正序</param>
    /// <param name="number">獲取的記錄數量</param>
    /// <returns></returns>
    public IQueryable<T> FindList<TKey>(Expression<Func<T, bool>> where, Expression<Func<T, TKey>> order, bool asc, int number)
    {
      return asc ? DbContext.Set<T>().Where(where).OrderBy(order).Take(number) : DbContext.Set<T>().Where(where).OrderByDescending(order).Take(number);
    }

5、查找實體分頁列表方法FindPageList

根據需要FindPageList進行多次重載

/// <summary>
    /// 查找分頁列表
    /// </summary>
    /// <param name="pageSize">每頁記錄數。必須大于1</param>
    /// <param name="pageIndex">頁碼。首頁從1開始,頁碼必須大于1</param>
    /// <param name="totalNumber">總記錄數</param>
    /// <returns></returns>
    public IQueryable<T> FindPageList(int pageSize, int pageIndex, out int totalNumber)
    {
      if (pageIndex < 1) pageIndex = 1;
      if (pageSize < 1) pageSize = 10;
      IQueryable<T> _list = DbContext.Set<T>();
      totalNumber = _list.Count();
      return _list.Skip((pageIndex - 1) * pageIndex).Take(pageSize);
    }

    /// <summary>
    /// 查找分頁列表
    /// </summary>
    /// <param name="pageSize">每頁記錄數。必須大于1</param>
    /// <param name="pageIndex">頁碼。首頁從1開始,頁碼必須大于1</param>
    /// <param name="totalNumber">總記錄數</param>
    /// <param name="order">排序鍵</param>
    /// <param name="asc">是否正序</param>
    /// <returns></returns>
    public IQueryable<T> FindPageList<TKey>(int pageSize, int pageIndex, out int totalNumber, Expression<Func<T, TKey>> order, bool asc)
    {
      if (pageIndex < 1) pageIndex = 1;
      if (pageSize < 1) pageSize = 10;
      IQueryable<T> _list = DbContext.Set<T>();
      _list = asc ? _list.OrderBy(order) : _list.OrderByDescending(order);
      totalNumber = _list.Count();
      return _list.Skip((pageIndex - 1) * pageIndex).Take(pageSize);
    }

    /// <summary>
    /// 查找分頁列表
    /// </summary>
    /// <param name="pageSize">每頁記錄數。必須大于1</param>
    /// <param name="pageIndex">頁碼。首頁從1開始,頁碼必須大于1</param>
    /// <param name="totalNumber">總記錄數</param>
    /// <param name="where">查詢表達式</param>
    public IQueryable<T> FindPageList(int pageSize, int pageIndex, out int totalNumber, Expression<Func<T, bool>> where)
    {
      if (pageIndex < 1) pageIndex = 1;
      if (pageSize < 1) pageSize = 10;
      IQueryable<T> _list = DbContext.Set<T>().Where(where);
      totalNumber = _list.Count();
      return _list.Skip((pageIndex - 1) * pageIndex).Take(pageSize);
    }

    /// <summary>
    /// 查找分頁列表
    /// </summary>
    /// <param name="pageSize">每頁記錄數。必須大于1</param>
    /// <param name="pageIndex">頁碼。首頁從1開始,頁碼必須大于1</param>
    /// <param name="totalNumber">總記錄數</param>
    /// <param name="where">查詢表達式</param>
    /// <param name="order">排序鍵</param>
    /// <param name="asc">是否正序</param>
    public IQueryable<T> FindPageList<TKey>(int pageSize, int pageIndex, out int totalNumber, Expression<Func<T, bool>> where, Expression<Func<T, TKey>> order, bool asc)
    {
      if (pageIndex < 1) pageIndex = 1;
      if (pageSize < 1) pageSize = 10;
      IQueryable<T> _list = DbContext.Set<T>().Where(where);
      _list = asc ? _list.OrderBy(order) : _list.OrderByDescending(order);
      totalNumber = _list.Count();
      return _list.Skip((pageIndex - 1) * pageIndex).Take(pageSize);
    }

6、添加實體方法Add

Add 方法有一個重載,重載方法可以選擇是否立即保存

/// <summary>
    /// 添加實體
    /// </summary>
    /// <param name="entity">實體</param>
    /// <returns>受影響的對象的數目</returns>
    public int Add(T entity)
    {
      return Add(entity, true);
    }

    /// <summary>
    /// 添加實體
    /// </summary>
    /// <param name="entity">實體</param>
    /// <param name="isSave">是否立即保存</param>
    /// <returns>在“isSave”為True時返回受影響的對象的數目,為False時直接返回0</returns>
    public int Add(T entity,bool isSave)
    {
      DbContext.Set<T>().Add(entity);
      return isSave ? DbContext.SaveChanges() : 0;
    }

7、更新實體方法Update

Updae 方法有一個重載,重載方法可以選擇是否立即保存

#region Update

    /// <summary>
    /// 更新實體【立即保存】
    /// </summary>
    /// <param name="entity">實體</param>
    /// <returns>在“isSave”為True時返回受影響的對象的數目,為False時直接返回0</returns>
    public int Update(T entity)
    {
      return Update(entity, true);
    }

    /// <summary>
    /// 更新實體
    /// </summary>
    /// <param name="entity">實體</param>
    /// <param name="isSave">是否立即保存</param>
    /// <returns>在“isSave”為True時返回受影響的對象的數目,為False時直接返回0</returns>
    public int Update(T entity, bool isSave)
    {
      DbContext.Set<T>().Attach(entity);
      DbContext.Entry<T>(entity).State = EntityState.Modified;
      return isSave ? DbContext.SaveChanges() : 0;
    }

8、刪除實體方法Delete

Delete 方法有兩個重載,一個是可以選擇否立即保存,另一個是批量刪除

/// <summary>
    /// 刪除實體【立即保存】
    /// </summary>
    /// <param name="entity">實體</param>
    /// <returns>受影響的對象的數目</returns>
    public int Delete(T entity)
    {
      return Delete(entity, true);
    }

    /// <summary>
    /// 刪除實體
    /// </summary>
    /// <param name="entity">實體</param>
    /// <param name="isSave">是否立即保存</param>
    /// <returns>在“isSave”為True時返回受影響的對象的數目,為False時直接返回0</returns>
    public int Delete(T entity,bool isSave)
    {
      DbContext.Set<T>().Remove(entity);
      return isSave ? DbContext.SaveChanges() : 0;
    }

    /// <summary>
    /// 批量刪除實體
    /// </summary>
    /// <param name="entities">實體集合</param>
    /// <returns>受影響的對象的數目</returns>
    public int Delete(IEnumerable<T> entities)
    {
      DbContext.Set<T>().RemoveRange(entities);
      return DbContext.SaveChanges();
    }

9、統計記錄數方法Count

Count 方法有一個重載,可以根據表達式進行統計

/// <summary>
    /// 記錄數
    /// </summary>
    /// <returns></returns>
    public int Count()
    {
      return DbContext.Set<T>().Count();
    }

    /// <summary>
    /// 記錄數
    /// </summary>
    /// <param name="predicate">表達式</param>
    /// <returns></returns>
    public int Count(Expression<Func<T, bool>> predicate)
    {
      return DbContext.Set<T>().Count(predicate);
    }

10、是否存在

/// <summary>
    /// 記錄是否存在
    /// </summary>
    /// <param name="predicate">表達式</param>
    /// <returns></returns>
    public bool IsContains(Expression<Func<T, bool>> predicate)
    {
      return Count(predicate) > 0;
    }

11、保存到數據庫

/// <summary>
    /// 保存數據【在Add、Upate、Delete未立即保存的情況下使用】
    /// </summary>
    /// <returns>受影響的記錄數</returns>
    public int Save()
    {
      return DbContext.SaveChanges();
    }

關于“ASP.NET MVC5網站開發之如何實現數據存儲層功能”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

许昌市| 威信县| 专栏| 崇义县| 辽宁省| 长葛市| 绥宁县| 奈曼旗| 乐东| 建湖县| 永城市| 四平市| 沾化县| 宾川县| 石门县| 都江堰市| 隆林| 泰宁县| 兴和县| 吉林市| 乌审旗| 通山县| 东丰县| 红原县| 依兰县| 汶上县| 白朗县| 应城市| 房产| 宜丰县| 新泰市| 改则县| 西丰县| 如东县| 临朐县| 中宁县| 大港区| 泽州县| 尼玛县| 孝昌县| 寻甸|