EF架构~终于自己架构了一个相对完整的EF方案

简介:

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

image 

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

image

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

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

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

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

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

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

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

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

RepositoryBase.c

 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     }

 本文转自博客园张占岭(仓储大叔)的博客,原文链接:EF架构~终于自己架构了一个相对完整的EF方案,如需转载请自行联系原博主。

目录
相关文章
|
6月前
|
消息中间件 监控 API
在Python中如何实现微服务架构,及相关的服务间通信方案?
Python微服务架构涉及服务划分、注册发现、通信协议选择(如HTTP、gRPC、消息队列)及服务间通信实现。每个服务应自治,有独立数据库和部署流程,并需考虑容错(如分布式事务、重试、熔断)和监控日志。API网关用于请求管理和路由。实际操作需根据需求和技术栈调整,并关注服务拆分和数据一致性。
173 5
|
15天前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
75 3
Mysql高可用架构方案
|
17天前
|
缓存 关系型数据库 MySQL
高并发架构系列:数据库主从同步的 3 种方案
本文详解高并发场景下数据库主从同步的三种解决方案:数据主从同步、数据库半同步复制、数据库中间件同步和缓存记录写key同步,旨在帮助解决数据一致性问题。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
高并发架构系列:数据库主从同步的 3 种方案
|
29天前
|
存储 缓存 NoSQL
分布式架构下 Session 共享的方案
【10月更文挑战第15天】在实际应用中,需要根据具体的业务需求、系统架构和性能要求等因素,选择合适的 Session 共享方案。同时,还需要不断地进行优化和调整,以确保系统的稳定性和可靠性。
|
2月前
|
存储 弹性计算 SDN
企业级 ECS 集群的构建需要综合考虑多个因素,通过不断的比较和对比不同的方案,选择最适合企业自身需求和发展的架构。
【9月更文挑战第5天】在数字化商业环境中,构建企业级ECS(弹性计算服务)集群对提升业务稳定性、扩展性和性能至关重要。本文将比较传统物理服务器与ECS架构,分析云服务商选择(如AWS和阿里云)、实例配置(CPU/内存)、网络架构(SDN vs 传统)及存储方案(本地存储 vs 云存储),帮助企业根据自身需求选出最优方案,实现高效稳定的ECS集群部署。
70 18
|
3月前
|
存储 NoSQL Java
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
这篇文章是关于Java面试中的分布式架构问题的笔记,包括分布式架构下的Session共享方案、RPC和RMI的理解、分布式ID生成方案、分布式锁解决方案以及分布式事务解决方案。
一天五道Java面试题----第十一天(分布式架构下,Session共享有什么方案--------->分布式事务解决方案)
|
3月前
|
弹性计算 关系型数据库 Serverless
云端架构下的高效多媒体文件处理方案测评体验
传统的服务器部署模式在处理高并发、大数据量的文件转换任务时,常面临资源瓶颈和成本上升的问题。使用函数计算,利用事件驱动和异步任务的方式,将文件处理任务与核心应用解耦,同时依靠函数计算自动弹性扩展和按使用付费的优势可以快速对多媒体文件进行处理。
|
3月前
|
存储 缓存 安全
MPP架构数据仓库使用问题之DADI相比其他方案,在资源使用上有什么优势
MPP架构数据仓库使用问题之DADI相比其他方案,在资源使用上有什么优势
|
5月前
|
缓存 NoSQL Java
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
案例 采用Springboot默认的缓存方案Simple在三层架构中完成一个手机验证码生成校验的程序
109 5
|
6月前
|
存储 Java 应用服务中间件
【分布式技术专题】「架构实践于案例分析」盘点互联网应用服务中常用分布式事务(刚性事务和柔性事务)的原理和方案
【分布式技术专题】「架构实践于案例分析」盘点互联网应用服务中常用分布式事务(刚性事务和柔性事务)的原理和方案
183 0

热门文章

最新文章