最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET MVC5網(wǎng)站開發(fā)之實現(xiàn)數(shù)據(jù)存儲層功能(三)

 更新時間:2022年05月08日 14:27:58   作者:洞庭夕照  
這篇文章主要為大家詳細(xì)介紹了ASP.NET MVC5網(wǎng)站開發(fā)之實現(xiàn)數(shù)據(jù)存儲層功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

數(shù)據(jù)存儲層在項目Ninesky.DataLibrary中實現(xiàn),整個項目只有一個類Repository。

Repository中實現(xiàn)增刪改查詢等方法供業(yè)務(wù)邏輯層調(diào)用,主要功能如下圖:

具體步驟

一、添加實體框架的引用

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

在NuGet包管理器中的瀏覽標(biāo)簽中點擊EntityFramework,點擊右側(cè)欄的安裝按鈕。

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

二、實現(xiàn)數(shù)據(jù)倉儲類

打開解決方案,選擇項目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、構(gòu)造函數(shù)

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

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

3、查找實體方法Find

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

/// <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表達(dá)式</param>
    /// <returns></returns>
    public T Find(Expression<Func<T,bool>> where)
    {
      return DbContext.Set<T>().SingleOrDefault(where);
    }

4、查找實體列表方法FindList

根據(jù)需要FindList進(jìn)行多次重載

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

    /// <summary>
    /// 查找實體列表
    /// </summary>
    /// <typeparam name="TKey">排序建類型</typeparam>
    /// <param name="order">排序表達(dá)式</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">獲取的記錄數(shù)量</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表達(dá)式</param>
    /// <returns></returns>
    public IQueryable<T> FindList(Expression<Func<T, bool>> where)
    {
      return DbContext.Set<T>().Where(where);
    }

    /// <summary>
    /// 查找實體列表
    /// </summary>
    /// <param name="where">查詢Lambda表達(dá)式</param>
    /// <param name="number">獲取的記錄數(shù)量</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表達(dá)式</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表達(dá)式</param>
    /// <param name="order">排序鍵</param>
    /// <param name="asc">是否正序</param>
    /// <param name="number">獲取的記錄數(shù)量</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

根據(jù)需要FindPageList進(jìn)行多次重載

/// <summary>
    /// 查找分頁列表
    /// </summary>
    /// <param name="pageSize">每頁記錄數(shù)。必須大于1</param>
    /// <param name="pageIndex">頁碼。首頁從1開始,頁碼必須大于1</param>
    /// <param name="totalNumber">總記錄數(shù)</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">每頁記錄數(shù)。必須大于1</param>
    /// <param name="pageIndex">頁碼。首頁從1開始,頁碼必須大于1</param>
    /// <param name="totalNumber">總記錄數(shù)</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">每頁記錄數(shù)。必須大于1</param>
    /// <param name="pageIndex">頁碼。首頁從1開始,頁碼必須大于1</param>
    /// <param name="totalNumber">總記錄數(shù)</param>
    /// <param name="where">查詢表達(dá)式</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">每頁記錄數(shù)。必須大于1</param>
    /// <param name="pageIndex">頁碼。首頁從1開始,頁碼必須大于1</param>
    /// <param name="totalNumber">總記錄數(shù)</param>
    /// <param name="where">查詢表達(dá)式</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>受影響的對象的數(shù)目</returns>
    public int Add(T entity)
    {
      return Add(entity, true);
    }

    /// <summary>
    /// 添加實體
    /// </summary>
    /// <param name="entity">實體</param>
    /// <param name="isSave">是否立即保存</param>
    /// <returns>在“isSave”為True時返回受影響的對象的數(shù)目,為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時返回受影響的對象的數(shù)目,為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時返回受影響的對象的數(shù)目,為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>受影響的對象的數(shù)目</returns>
    public int Delete(T entity)
    {
      return Delete(entity, true);
    }

    /// <summary>
    /// 刪除實體
    /// </summary>
    /// <param name="entity">實體</param>
    /// <param name="isSave">是否立即保存</param>
    /// <returns>在“isSave”為True時返回受影響的對象的數(shù)目,為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>受影響的對象的數(shù)目</returns>
    public int Delete(IEnumerable<T> entities)
    {
      DbContext.Set<T>().RemoveRange(entities);
      return DbContext.SaveChanges();
    }

9、統(tǒng)計記錄數(shù)方法Count

Count 方法有一個重載,可以根據(jù)表達(dá)式進(jìn)行統(tǒng)計

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

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

10、是否存在

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

11、保存到數(shù)據(jù)庫

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • .NET Core對象池的應(yīng)用:編程篇

    .NET Core對象池的應(yīng)用:編程篇

    對象池就是對象的容器,旨在優(yōu)化資源的使用,通過在一個容器中池化對象,并根據(jù)需要重復(fù)使用這些池化對象來滿足性能上的需求。這篇文章主要介紹了.NET Core對象池的應(yīng)用,感興趣的小伙伴可以參考一下
    2021-09-09
  • jquery提交表單mvc3后臺處理示例

    jquery提交表單mvc3后臺處理示例

    這篇文章主要介紹了jquery提交表單mvc3后臺處理示例,需要的朋友可以參考下
    2014-05-05
  • 在ASP.NET?MVC下限制同一個IP地址單位時間間隔內(nèi)的請求次數(shù)的解決方法

    在ASP.NET?MVC下限制同一個IP地址單位時間間隔內(nèi)的請求次數(shù)的解決方法

    有時候,當(dāng)用戶請求一個Controller下的Action,我們希望,在單位時間間隔內(nèi),比如每秒,每分鐘,每小時,每天,每星期,限制同一個IP地址對某個Action的請求次數(shù),如何做呢?這篇文章主要介紹了在ASP.NET?MVC下限制同一個IP地址單位時間間隔內(nèi)的請求次數(shù),需要的朋友可以參考下
    2024-01-01
  • ASP.NET?Core使用EF為關(guān)系數(shù)據(jù)庫建模

    ASP.NET?Core使用EF為關(guān)系數(shù)據(jù)庫建模

    這篇文章介紹了ASP.NET?Core使用EF為關(guān)系數(shù)據(jù)庫建模的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • asp.net驗證碼的簡單制作

    asp.net驗證碼的簡單制作

    當(dāng)用戶進(jìn)行注冊、登陸的時候都會遇到輸入驗證碼的情況,那驗證碼到底是怎么制作的,下面就為大家講解如何使用ASP.NET制作簡單的驗證碼,感興趣的朋友可以參考一下
    2015-09-09
  • .NET?6開發(fā)TodoList應(yīng)用之使用MediatR實現(xiàn)POST請求

    .NET?6開發(fā)TodoList應(yīng)用之使用MediatR實現(xiàn)POST請求

    對于稍微正式的項目,.NET工程上習(xí)慣的實現(xiàn)是通過使用比較成熟的類庫框架,有效地對業(yè)務(wù)邏輯進(jìn)行分類管理、消除冗余代碼,以達(dá)到業(yè)務(wù)邏輯職責(zé)清晰簡潔的目的。在這個階段我們經(jīng)常使用的兩個類庫分別是AutoMapper和MediatR。本文將為大家介紹MediatR如何實現(xiàn)POST請求
    2021-12-12
  • .net msmq消息隊列實例詳解

    .net msmq消息隊列實例詳解

    這篇文章主要為大家詳細(xì)介紹了.net msmq消息隊列的實例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • DataList綁定到Row[]行集合的問題的方法

    DataList綁定到Row[]行集合的問題的方法

    DataList綁定到Row[]行集合的問題的方法...
    2007-09-09
  • ASP.NET?使用?Dispose?釋放資源的四種方法詳細(xì)介紹

    ASP.NET?使用?Dispose?釋放資源的四種方法詳細(xì)介紹

    本篇文章主要介紹了ASP.NET?使用?Dispose?釋放資源的四種方法,有興趣的同學(xué)可以來看看,喜歡的話記得收藏一下哦,方便下次瀏覽觀看
    2021-11-11
  • ASP.NET MVC Admin主頁快速構(gòu)建

    ASP.NET MVC Admin主頁快速構(gòu)建

    這篇文章主要為大家詳細(xì)介紹了ASP.NET MVC Admin主頁快速構(gòu)建的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05

最新評論

社旗县| 永和县| 溆浦县| 邹平县| 油尖旺区| 四川省| 青河县| 乌拉特后旗| 揭东县| 遵义县| 宜良县| 鄯善县| 阜新| 辽宁省| 辽源市| 利辛县| 博白县| 高州市| 平远县| 桂林市| 西华县| 福建省| 泌阳县| 亳州市| 湾仔区| 华坪县| 湘阴县| 龙井市| 曲沃县| 云南省| 西平县| 深水埗区| 怀集县| 汾西县| 连平县| 东乌珠穆沁旗| 武夷山市| 张家港市| 衡水市| 滨州市| 萨嘎县|