码迷,mamicode.com
首页 > Web开发 > 详细

自主研发轻量级注入容器+asp.net ef

时间:2015-01-30 09:06:27      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

         好久没有来写博文,最近工作比较忙,最近公司在做新系统,想应用一套注入容器,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


自主研发轻量级注入容器+asp.net ef

标签:

原文地址:http://blog.csdn.net/yancongmin0702/article/details/43286685

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!