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方案,如需转载请自行联系原博主。

目录
相关文章
|
1月前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
162 3
Mysql高可用架构方案
|
1天前
|
NoSQL Java Redis
使用Qwen2.5+SpringBoot+SpringAI+SpringWebFlux的基于意图识别的多智能体架构方案
随着智能技术的发展,2025年成为智能体发展的关键一年。本项目旨在构建一个多智能体统一交互平台,通过单一入口访问各类智能体服务,提升用户体验和效率。系统具备意图识别、连续对话支持和高效数据处理等特性,采用Spring Boot、Redis、Qwen等技术栈,实现智能体的选择与执行,并提供流式处理和会话管理功能。完整代码托管于GitHub仓库[multi-agent-arch](https://github.com/CoderSJX/multi-agent-arch)。
73 3
|
21天前
|
消息中间件 架构师 数据库
本地消息表事务:10Wqps 高并发分布式事务的 终极方案,大厂架构师的 必备方案
45岁资深架构师尼恩分享了一篇关于分布式事务的文章,详细解析了如何在10Wqps高并发场景下实现分布式事务。文章从传统单体架构到微服务架构下分布式事务的需求背景出发,介绍了Seata这一开源分布式事务解决方案及其AT和TCC两种模式。随后,文章深入探讨了经典ebay本地消息表方案,以及如何使用RocketMQ消息队列替代数据库表来提高性能和可靠性。尼恩还分享了如何结合延迟消息进行事务数据的定时对账,确保最终一致性。最后,尼恩强调了高端面试中需要准备“高大上”的答案,并提供了多个技术领域的深度学习资料,帮助读者提升技术水平,顺利通过面试。
本地消息表事务:10Wqps 高并发分布式事务的 终极方案,大厂架构师的 必备方案
|
1月前
|
缓存 关系型数据库 MySQL
高并发架构系列:数据库主从同步的 3 种方案
本文详解高并发场景下数据库主从同步的三种解决方案:数据主从同步、数据库半同步复制、数据库中间件同步和缓存记录写key同步,旨在帮助解决数据一致性问题。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
高并发架构系列:数据库主从同步的 3 种方案
|
7天前
|
弹性计算 负载均衡 安全
云端问道-Web应用上云经典架构方案教学
本文介绍了企业业务上云的经典架构设计,涵盖用户业务现状及挑战、阿里云业务托管架构设计、方案选型配置及业务初期低门槛使用等内容。通过详细分析现有架构的问题,提出了高可用、安全、可扩展的解决方案,并提供了按量付费的低成本选项,帮助企业在业务初期顺利上云。
|
7天前
|
弹性计算 负载均衡 安全
企业业务上云经典架构方案整体介绍
本次课程由阿里云产品经理晋侨分享,主题为企业业务上云经典架构。内容涵盖用户业务架构现状及挑战、阿里云业务托管经典架构设计、方案涉及的产品选型配置,以及业务初期如何低门槛使用。课程详细介绍了企业业务上云的全流程,帮助用户实现高可用、稳定、可扩展的云架构。
|
2月前
|
存储 缓存 NoSQL
分布式架构下 Session 共享的方案
【10月更文挑战第15天】在实际应用中,需要根据具体的业务需求、系统架构和性能要求等因素,选择合适的 Session 共享方案。同时,还需要不断地进行优化和调整,以确保系统的稳定性和可靠性。
|
3月前
|
存储 弹性计算 SDN
企业级 ECS 集群的构建需要综合考虑多个因素,通过不断的比较和对比不同的方案,选择最适合企业自身需求和发展的架构。
【9月更文挑战第5天】在数字化商业环境中,构建企业级ECS(弹性计算服务)集群对提升业务稳定性、扩展性和性能至关重要。本文将比较传统物理服务器与ECS架构,分析云服务商选择(如AWS和阿里云)、实例配置(CPU/内存)、网络架构(SDN vs 传统)及存储方案(本地存储 vs 云存储),帮助企业根据自身需求选出最优方案,实现高效稳定的ECS集群部署。
79 18
|
4月前
|
弹性计算 关系型数据库 Serverless
云端架构下的高效多媒体文件处理方案测评体验
传统的服务器部署模式在处理高并发、大数据量的文件转换任务时,常面临资源瓶颈和成本上升的问题。使用函数计算,利用事件驱动和异步任务的方式,将文件处理任务与核心应用解耦,同时依靠函数计算自动弹性扩展和按使用付费的优势可以快速对多媒体文件进行处理。
|
4月前
|
存储 缓存 安全
MPP架构数据仓库使用问题之DADI相比其他方案,在资源使用上有什么优势
MPP架构数据仓库使用问题之DADI相比其他方案,在资源使用上有什么优势