MVC,EF 小小封装,mvcef封装

1.项目中经常要用到 EF,有时候大多数的增删改查都是重复性的东西,本次封装就是为了快速开发,期间没有考虑到架构上的各种思想,就感觉到欠缺点什么东西所以这次将这些拉出来,有存在问题的话还请各位多多指导。

2.封装后从压力和并发上也没有去测试,有兴趣的小伙伴还望给看下。好了不废话了直接上了。
 a.先看下大概结构如下   按照顺序介绍  a.1: 实体就是一般大家手动写的实体  

a.2:  DALContext.cs 代码如下:

namespace Test.Web.Site.DAL
{
     public class DALContext<T> : DbContext
          where T : class
     {
          public DALContext(string con)
               : base(con){}

          public DALContext(){}

          public DbSet<T> TV { get; set; }
     }
}

a.3  BaseDAL.cs  主要的增删改方法

namespace Test.Web.Site.DAL
{

     public class BaseDAL<TEntity>
          where TEntity : class,new()
     {
          private static readonly object s_lock = new object();
          private string constr = "xxxConn";//默认一个字符串
          public BaseDAL(string con = "")
          {
               if (con != constr && con.Length > 0)
               {
                    lock (s_lock)
                    {
                         constr = con;
                    }
               }
          }

          #region Modify and Delete

          public virtual bool Insert(TEntity entity)
          {
               using (var db = new DALContext<TEntity>(constr))
               {
                    db.Set<TEntity>().Add(entity);
                    return db.SaveChanges() > 0;
               }
          }
          public virtual bool Delete(object col)
          {
               using (var db = new DALContext<TEntity>(constr))
               {
                    TEntity entityToDelete = db.Set<TEntity>().Find(col);
                    if (entityToDelete != null)
                    {
                         return Delete(entityToDelete);
                    }
                    else
                    {
                         return false;
                    }
               }

          }

          public virtual bool Delete(Expression<Func<TEntity, bool>> predicate)
          {
               TEntity entityToDelete = Get(predicate);
               if (entityToDelete != null)
               {
                    return Delete(entityToDelete);
               }
               else
               {
                    return false;
               }
          }
          public virtual IEnumerable<TEntity> InsertAll(List<TEntity> list)
          {
               using (var db = new DALContext<TEntity>(constr))
               {
                    var dbSet = db.Set<TEntity>();
                    List<TEntity> tList = new List<TEntity>();
                    foreach (var item in list)
                    {
                         try
                         {
                              db.Set<TEntity>().Add(item);

                         }
                         catch (Exception)
                         {
                              tList.Add(item);
                              throw;
                         }
                    }
                    db.SaveChanges();
                    return tList;
               }
          }
          public virtual IEnumerable<TEntity> UpdateAll(List<TEntity> list)
          {
               using (var db = new DALContext<TEntity>(constr))
               {
                    var dbSet = db.Set<TEntity>();
                    List<TEntity> tList = new List<TEntity>();
                    foreach (var item in list)
                    {
                         try
                         {
                              var entity = dbSet.Attach(item);
                              db.Entry(item).State = System.Data.EntityState.Modified;
                         }
                         catch (Exception)
                         {
                              tList.Add(item);
                              throw;
                         }

                    }
                    db.SaveChanges();
                    return tList;
               }
          }
          public virtual bool Update(TEntity entityToUpdate)
          {
               using (var db = new DALContext<TEntity>(constr))
               {
                    var dbSet = db.Set<TEntity>();
                    var entity = dbSet.Attach(entityToUpdate);
                    db.Entry(entityToUpdate).State = System.Data.EntityState.Modified;
                    return db.SaveChanges() > 0;
               }
          }
          #endregion
     }
}

a.4 DatabaseExtensions.cs 一个EF 扩展类 用于 连接其他数据库比如 mysql(参考的网络资源),执行sql语句查询视图有需要可在下方评论,我会及时回复

a.5 :  Test.Web.Site.BLL  对Control 开放的一系列方法 ,这里仅列举了部分代码出来,如有需要可在下方评论我及时回复你。

namespace Test.Web.Site.BLL
{
    public class DataBLL<T>
         where T : class,new()
    {
        // 连接字符串
        public DataBLL(string constr = "")
        {
            SingletonBase<BaseDAL<T>>.Initialize(new BaseDAL<T>(constr));
        }public T Get(Expression<Func<T, bool>> filter, string includeProperties = "")
        {
            return SingletonBase<BaseDAL<T>>.Instance.Get(filter, includeProperties);
        }

        // 插入一个实体
        public bool AddEntity(T t_entity)
        {
            return SingletonBase<BaseDAL<T>>.Instance.Insert(t_entity);
        }
        // 跟新实体
        public bool Update(T t_enttiy)
        {
            return SingletonBase<BaseDAL<T>>.Instance.Update(t_enttiy);
        }
        // 依据sql查询 list 
        public IEnumerable<object> GetListBySql(string query,bool otherdb = true)
        {
            return SingletonBase<BaseDAL<T>>.Instance.GetBySql(query, otherdb);
        }
        // 删除满足条件的所有数据
        public IEnumerable<T> DeleteAll(Expression<Func<T, bool>> predicate)
        {
            return SingletonBase<BaseDAL<T>>.Instance.DeleteAll(predicate);
        }
        // 批量更新 list 
        public IEnumerable<T> UpdateAll(List<T> list)
        {
             return SingletonBase<BaseDAL<T>>.Instance.UpdateAll(list);
        }
        // 批量添加
        public IEnumerable<T> InsertAll(List<T> list)
        {
             return SingletonBase<BaseDAL<T>>.Instance.InsertAll(list);
        }
    }
}

3.Control 调用只需要类似:

Account currAccount = new DataBLL<Account>(ConfigHelper.Constr_read).Get(p => p.UserId == 1111);

  new DataBLL<Account>.GetPage(out totalCount, query.Expression, pageIndex, pageSize, k => k.OrderByDescending(_ => _.CreateTime)).ToList();

 

总结:到此就结束了所有代码可复制过去加入EF引用就开始用了。有发现问题的小伙伴敬请抛砖。小弟不胜感激。

基于EF+MVC+Bootstrap的通用管理系统。 Framework 业务无关的底层通用机制及功能 Model基类:提供数据传输和底层的最基本的基类及接口 DAL底层:基于EF code first,提供Repository泛型方法及写历史日志 Untility:通用函数库,基本都全了 Web:复写MVC基类,及通用MVC控件 通用模块Core 核心功能模块,包括缓存管理,配置管理,日志管理,服务管理...... 缓存模块:提供对分布式缓存的Provider扩展 配置模块:基于正则的配置管理及CURD机制 日志模块:基于Log4net扩展 服务模块:默认使用引用Bll,可扩张调用Wcf服务,且拦截服务 上传模块:通用upload handler,及缩略图生成方式(按需生成,即时生成,延迟生成) 管道模块:通用HttpModule,用于注入通用功能到各个应用及网站 应用模块三层架构 提供OA,CMS,CRM系统的原型及DAL,IBLL及BLL实现 Account:用户认证,可自己扩张到SSO单点登录 Account: 安全验证码实现 Account: 轻量级权限系统 OA:提供OA里人员,部门管理及分配的场景实例 CRM:客户管理系统原型 CMS:内容发布系统原型 数据层(DAL): 采用Code first POCO方式 提供实体设计:一对一,一对多,多对多,自引用的各种使用场景 业务逻辑层(BLL): 实现CURD方法 提供复杂查询场景 提供业务异常抛出 对后端异常进行拦截写日志 对写操作进行写历史,用于追踪 IBLL: 服务接口,可扩展用WCF发布BLL作为服务 前端框架及实现 MVC,Bootstrap.......... 基于Bootstrap:基于“Metronic Bootstrap Theme”模板 MVC 4.0:CURD操作基于MVC Model Binder Silverlight 5:OA里组织图OrgChart拖拽操作 封装Context封装ConfigContext,CacheContext,UserContext,CookieContext.. 上传控件:Uploadify使用实例 Jquery:除Metronic模板在Assets文件夹,Content文件夹加入需要的Jquery插件 提供富文本编辑器,标签,JS曲线图等实例 一款采用C#开发的源码,功能完整,界面美观,欢迎大家下载。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值