EF4.1学了有段时间了,没有静下来好好研究它的架构,今天有空正好把它的架构及数据操作这段拿出来,希望给大家带来帮助,对我自己也是一种总结:P

从图中可以看到,我们用的是MVC3进行程序开发的,哈哈,也是刚开始用3.0,项目整体架构还是传统三层,其它公用层我就不说了,服务层和UI层也不说了,单说EF还在的实体层和数据层,我用EF生成器把它生成后,又整理了一个,因为我不想让EF的低层方法暴露给业务层.

我来一个一个的说我的方案:

OAContext.cs:这是生成器生成的,这不作修

RepositoryBase.cs:这是数据库基类,里面对它的子类公开了一个属性和一个方法,

属性就是OAContext的实例,而方法就是SaveChanges的一个封装,子类可以根据自己的逻辑去复写它.

IRepository.cs:这是提供更新操作的统一接口,需要有更新需要的子类去实现,EF的统一更新我还没有想出来,哈哈

IEntityRepository.cs:这是统一的数据操作接口,除了更新之外的所有操作,统一操作接口是一个泛型接口

EntityRepository.cs:对统一操作接口的实现

好了,下面我把源代码公开,大家可以看一下,有好的建设请和我联系!

RepositoryBase.cs

 1     /// <summary>
2
3 /// 数据操作基类
4
5 /// </summary>
6
7 public abstract class RepositoryBase
8
9 {
10
11 #region 单件模式创建一个类对象
12
13 /// <summary>
14
15 /// 数据源对象
16
17 /// </summary>
18
19 private static OAContext dbContext = null;
20
21 protected static OAContext CreateInstance()
22
23 {
24
25 if (dbContext == null)
26
27 dbContext = new OAContext();
28
29 return dbContext;
30
31 }
32
33 #endregion
34
35
36
37 public OAContext _db = CreateInstance();
38
39
40
41 /// <summary>
42
43 /// 存储变化 service层可能也会使用本方法,所以声明为public
44
45 /// </summary>
46
47 public virtual void SaveChanges()
48
49 {
50
51 this._db.Configuration.ValidateOnSaveEnabled = false;
52
53 this._db.SaveChanges();
54
55 }
56
57 }

IRepository.CS

 1     /// <summary>
2
3 /// 数据操作统一接口(更新)
4
5 /// </summary>
6
7 public interface IRepository<TEntity> where TEntity : class //这里使用泛型接口
8
9 {
10
11 /// <summary>
12
13 /// 根据数据库实体—》更新记录
14
15 /// </summary>
16
17 /// <param name="entity"></param>
18
19 void Update(TEntity entity);
20
21
22
23 /// <summary>
24
25 /// 根据响应的属性名称进行更新
26
27 /// </summary>
28
29 /// <param name="entity">要更新的实体</param>
30
31 /// <param name="enums">要响应的列枚举</param>
32
33 void Update(TEntity entity, Enum enums);
34
35
36
37 /// <summary>
38
39 /// 根据数据库实体—》[批量]更新记录
40
41 /// </summary>
42
43 /// <param name="entity"></param>
44
45 void Update(IList<TEntity> list);
46
47
48
49 /// <summary>
50
51 /// 根据响应的属性名称进行批量更新
52
53 /// </summary>
54
55 /// <param name="list">要更新的实体IList<IDataEntity></param>
56
57 /// <param name="enums">要响应的列枚举</param>
58
59 void Update(IList<TEntity> list, Enum enums);
60
61 }

IEntityRepository.cs

 1     /// <summary>
2
3 /// 数据操作统一接口(插入,查詢,刪除)
4
5 /// </summary>
6
7 public interface IEntityRepository<TEntity> where TEntity : class //这里使用泛型接口
8
9 {
10
11
12
13 /// <summary>
14
15 /// 根据数据库实体—》插入记录
16
17 /// </summary>
18
19 void Insert(TEntity entity);
20
21
22
23 /// <summary>
24
25 /// 根据数据库实体—》[批量]插入记录
26
27 /// </summary>
28
29 void Insert(IList<TEntity> list);
30
31
32
33 /// <summary>
34
35 /// 删除单条记录
36
37 /// </summary>
38
39 /// <param name="oArr"></param>
40
41 void Delete(TEntity entity);
42
43
44
45 /// <summary>
46
47 /// 删除列表
48
49 /// </summary>
50
51 /// <param name="list"></param>
52
53 void Delete(IList<TEntity> list);
54
55
56
57 /// <summary>
58
59 /// 得到实体列表
60
61 /// </summary>
62
63 /// <returns></returns>
64
65 DbSet<TEntity> GetList();
66
67 }

EntityRepository.cs

  1      /// <summary>
2
3 /// 数据操作实现类(统一实现类)
4
5 /// </summary>
6
7 /// <typeparam name="TEntity"></typeparam>
8
9 public class EntityRepository<TEntity> : RepositoryBase, IEntityRepository<TEntity>
10
11 where TEntity : class
12
13 {
14
15 #region IEntityRepository<TEntity> Members
16
17
18
19 public void Insert(TEntity entity)
20
21 {
22
23 this._db.Set<TEntity>().Add(entity);
24
25 this._db.Entry(entity).State = System.Data.EntityState.Added;
26
27 this.SaveChanges();
28
29 }
30
31
32
33 public void Insert(IList<TEntity> list)
34
35 {
36
37 list.ToList().ForEach(entity =>
38
39 {
40
41 this._db.Set<TEntity>().Add(entity);
42
43 this._db.Entry(entity).State = System.Data.EntityState.Added;
44
45 });
46
47 this.SaveChanges();
48
49 }
50
51
52
53 public void Delete(TEntity entity)
54
55 {
56
57 this._db.Set<TEntity>().Remove(entity);
58
59 this._db.Entry(entity).State = System.Data.EntityState.Deleted;
60
61 this.SaveChanges();
62
63 }
64
65
66
67 public void Delete(IList<TEntity> list)
68
69 {
70
71 list.ToList().ForEach(entity =>
72
73 {
74
75 this._db.Set<TEntity>().Remove(entity);
76
77 this._db.Entry(entity).State = System.Data.EntityState.Deleted;
78
79 });
80
81 this.SaveChanges();
82
83 }
84
85
86
87 public System.Data.Entity.DbSet<TEntity> GetList()
88
89 {
90
91 return this.DbSet;
92
93 }
94
95
96
97 /// <summary>
98
99 /// 泛型数据表属性
100
101 /// </summary>
102
103 protected DbSet<TEntity> DbSet
104
105 {
106
107 get { return this._db.Set<TEntity>(); }
108
109 }
110
111 #endregion
112
113
114
115 /// <summary>
116
117 /// 操作提交
118
119 /// </summary>
120
121 public override void SaveChanges()
122
123 {
124
125 base.SaveChanges();
126
127 }
128
129 }

最新文章

  1. nginx 在windows平台上对asp.net做反向代理
  2. OPRNGL总结(一)OPENGL的理论原理
  3. 代码研磨 Slim v3 (二)--app-&gt;run()
  4. Linux统计某文件夹下文件、文件夹的个数
  5. C#中单问号,双问号的用法(转)
  6. VC中窗口ID,句柄,指针三者相互转换函数【转】
  7. 关于js封装框架类库之属性操作
  8. Codeforces 429 A. Xor-tree
  9. iOS 制作 framework 教程
  10. CodeForces 707D Persistent Bookcase
  11. Gym100971B Gym100971C Gym100971F Gym100971G Gym100971K Gym100971L(都是好写的题。。。) IX Samara Regional Intercollegiate Programming Contest Russia, Samara, March 13, 2016
  12. Js - JQ事件委托( 适用于给动态生成的脚本元素添加事件)
  13. 关于JS前台计算四舍五入的问题
  14. 看完此文还不懂NB-IoT,你就过来掐死我吧...【转】
  15. python 循环 while
  16. 获取mp3文件的采样率
  17. 2018-05-27-computer-using-hints-电脑使用帮助[持续更新]
  18. day5 if else elif 判断语句
  19. leetcode 486 预测赢家
  20. 8个对程序员来说有用的jQuery小贴士和技巧

热门文章

  1. input标签不能设置height
  2. bzoj 3881 [Coci2015]Divljak fail树+树链的并
  3. APUE 学习笔记(七) 信号
  4. 2018.7.31 Noip2018模拟测试赛(十六)
  5. 【vijos1144】小胖守皇宫(树形DP)
  6. 标准C程序设计七---65
  7. 35深入理解C指针之---结构体基础
  8. Charger Warning Message
  9. Scrapy学习-15-降低被识别为爬虫的方法
  10. python 终端模拟模块 pexpect