自主研发轻量级注入容器+asp.net ef
好久没有来写博文,最近工作比较忙,最近公司在做新系统,想应用一套注入容器,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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。