激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - ASP.NET MVC5網站開發之實現數據存儲層功能(三)

ASP.NET MVC5網站開發之實現數據存儲層功能(三)

2020-03-19 14:47洞庭夕照 ASP.NET教程

這篇文章主要為大家詳細介紹了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。

?
1
2
3
4
5
6
public Repository()
    { }
    public Repository(DbContext dbContext)
    {
      DbContext = dbContext;
    }

3、查找實體方法Find

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/// <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進行多次重載

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/// <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進行多次重載

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/// <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 方法有一個重載,重載方法可以選擇是否立即保存

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/// <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 方法有一個重載,重載方法可以選擇是否立即保存

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#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 方法有兩個重載,一個是可以選擇否立即保存,另一個是批量刪除

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/// <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 方法有一個重載,可以根據表達式進行統計

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/// <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、是否存在

?
1
2
3
4
5
6
7
8
9
/// <summary>
    /// 記錄是否存在
    /// </summary>
    /// <param name="predicate">表達式</param>
    /// <returns></returns>
    public bool IsContains(Expression<Func<T, bool>> predicate)
    {
      return Count(predicate) > 0;
    }

11、保存到數據庫

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

原文鏈接:http://www.cnblogs.com/mzwhj/p/5184186.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久国语对白 | 色综合久久久久久久久久久 | 免费一级特黄做受大片 | 91 免费看片 | 日韩电影一区二区三区 | 色综合视频网 | 欧美精品一区二区三区四区 | 欧美一级久久 | 国产精选电影免费在线观看网站 | 日本中文一级片 | 免费观看黄色一级视频 | 免费国产之a视频 | 成人男女啪啪免费观看网站四虎 | 色综合网在线观看 | 黄网站在线免费 | 日本在线视频免费观看 | 欧美一区二区三区久久综合 | 亚洲成人中文字幕在线 | 欧美黄色一区 | 久久99国产精品免费网站 | 国产成人自拍视频在线 | 黄色片免费在线 | 欧美在线a | 欧美一级做一a做片性视频 黄色网址免费进入 | 午夜视频观看 | 爱福利视频网 | 草b视频在线观看 | 中文字幕在线资源 | 精品国产乱码一区二区三区四区 | 日韩三区视频 | 亚洲网站在线播放 | 久久精品日产第一区二区三区 | 国产免费成人 | 欧美成人免费 | 一色屋任你操 | 午夜久| 污视频在线免费播放 | 欧美精品38videos性欧美 | 成人免费观看49www在线观看 | 国产免费人做人爱午夜视频 | 天天躁狠狠躁夜躁2020挡不住 |