自主研发轻量级注入容器+asp.net ef
来源:互联网 发布:北京好的设计公司知乎 编辑:程序博客网 时间:2024/05/21 21:45
好久没有来写博文,最近工作比较忙,最近公司在做新系统,想应用一套注入容器,unity,autofac,spring.net。都是可以选择的,还有自己专门研发封装的“SpeedIoc轻量级容器‘,性能肯定是不用说。
所以就用SpeedIoc+asp.net ef测试了一套新架构。有人说EF性能太差,可是我个人是没有这样觉得。做一般的项目,EF还是可以的,只是首次启动的时候会慢一点。
其中应用的是ef其中之一的代码优先模式,包括自动生成数据库,数据库操层公共接口+实现,业务层公共接口+实现。SpeedIoc对每层接口的注入。主要的代码如下:
using System;using System.Linq;namespace EF.IDAL{ /// <summary> /// 基于EF,数据库操作层公共接口 /// </summary> /// <typeparam name="T"></typeparam> public interface IBaseRepository<T> where T : class,new() { /// <summary> /// /// </summary> /// <returns></returns> IQueryable<T> FindAll(); /// <summary> /// 获取记录数 /// </summary> /// <param name="exp">执行的条件返回bool</param> /// <returns>返回int</returns> int GetCount(Func<T, bool> exp); /// <summary> /// 获取Entities(列表) /// </summary> /// <param name="exp">执行的条件返回bool</param> /// <returns>返回一个IQueryable</returns> IQueryable<T> GetEntities(Func<T, bool> whereLambda); /// <summary> /// 查询Entity(单个) /// </summary> /// <param name="exp">执行的条件返回bool</param> /// <returns>返回实体</returns> T GetEntity(Func<T, bool> exp); /// <summary> /// 添加一个实体到数据库 /// </summary> /// <param name="entity">要添加到数据库的实体</param> /// <returns>返回实体</returns> T AddEntity(T entity); /// <summary> /// 修改一个实体 /// </summary> /// <param name="entity">要修改的实体</param> /// <returns>返回bool</returns> bool UpdateEntity(T entity); /// <summary> /// 删除一个实体 /// </summary> /// <param name="entity">要删除的实体</param> /// <returns>返回bool</returns> bool DeleteEntity(T entity); /// <summary> /// 实现对数据的分页查询 /// </summary> /// <typeparam name="S">按照某个类进行排序</typeparam> /// <param name="pageIndex">当前第几页</param> /// <param name="pageSize">一页显示多少条数据</param> /// <param name="total">总条数</param> /// <param name="whereLambda">取得排序的条件</param> /// <param name="isAsc">如何排序,根据倒叙还是升序</param> /// <param name="orderByLambda">根据那个字段进行排序</param> /// <returns>返回IQueryable</returns> IQueryable<T> LoadPageEntities<S>(int pageIndex, int pageSize, out int total, Func<T, bool> whereLambda, bool isAsc, Func<T, S> orderByLambda); }}
/// <summary> /// 基于EF,数据库操作层公共实现 /// </summary> /// <typeparam name="T"></typeparam> public abstract class BaseRepository<T> : IBaseRepository<T> where T : class,new() { private WinDbContext db; public BaseRepository() { db = new WinDbContext(); } /// <summary> /// 添加一个实体到数据库 /// </summary> /// <param name="entity">要添加到数据库的实体</param> /// <returns>返回实体</returns> public T AddEntity(T entity) { db.Entry<T>(entity).State = EntityState.Added; db.SaveChanges(); return entity; } /// <summary> /// 删除一个实体 /// </summary> /// <param name="entity">要删除的实体</param> /// <returns>返回bool</returns> public bool DeleteEntity(T entity) { db.Set<T>().Attach(entity); db.Entry<T>(entity).State = EntityState.Deleted; return db.SaveChanges() > 0; } /// <summary> /// 获取记录数 /// </summary> /// <param name="exp">执行的条件返回bool</param> /// <returns>返回int</returns> public int GetCount(Func<T, bool> exp) { return db.Set<T>().Where<T>(exp).ToList<T>().Count; } /// <summary> /// 获取Entities(列表) /// </summary> /// <param name="exp">执行的条件返回bool</param> /// <returns>返回一个IQueryable</returns> public IQueryable<T> GetEntities(Func<T, bool> whereLambda) { return db.Set<T>().Where<T>(whereLambda).AsQueryable(); }
#region 数据库操作层接口注入 //角色信息 builder.RegisterType<RoleDAL>().AsImplementedInterfaces(); //用户信息 builder.RegisterType<UserDAL>().AsImplementedInterfaces(); #endregion #region 业务逻辑层接口注入 //用户信息 builder.RegisterType<UserBLL>().AsImplementedInterfaces(); //角色信息 builder.RegisterType<RoleBLL>().AsImplementedInterfaces(); #endregion
1 0
- 自主研发轻量级注入容器+asp.net ef
- ASP.NET Web Application 中使用 Unity 依赖注入容器
- Ninject--ASP.NET MVC 3中的依赖注入容器
- IoC容器Autofac(4) - Autofact + Asp.net MVC + EF Code First(附源码)
- 构建ASP.NET MVC5+EF6+EasyUI 1.5+Unity4.x注入的后台管理系统(62)-EF链接串加密
- Spring轻量级容器控制反转与依赖注入
- asp.net 防注入
- asp.net Sql注入
- Asp.net 防注入
- Asp.Net EF Code First 简单入门
- asp.net EF的简单使用
- asp.net mvc ef 查询 报错
- asp.net EF 处理模型更改
- Autofact + Asp.net MVC + EF Code First
- ASP.NET + MVC +EF 实现批量更新
- Asp.Net MVC EF各版本区别
- asp.net MVC EF+并发处理
- Asp.net Core 使用EF连接MariaDb
- Win7 64位scrapy安装
- Invalid project description相关问题
- 杭电ACM 1004 JAVA
- Win7任务栏相关设置
- Android multipart form 提交测试
- 自主研发轻量级注入容器+asp.net ef
- 20150129学习总结
- postgreSql 判断表不存在而创建表
- hdu 5120 圆和圆交面积模板
- 忘记Ucenter创始人密码的最快速解决方法
- 在Excel中创建默认的工作簿工作表模板
- Largest Number
- 程序员必须知道的10大基础实用算法及其讲解
- RMAN-06208: to mismatched status. Use CROSSCHECK command to fix status- 未完待续