自主研发轻量级注入容器+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
原创粉丝点击