自主研发轻量级注入容器+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


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。