MVC,EF 小小封装
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 static string constr = "xxxConn";//默认一个字符串
public BaseDAL(string con = "")
{
if (con != constr && con.Length > )
{
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() > ;
}
}
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() > ;
}
}
#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引用就开始用了。有发现问题的小伙伴敬请抛砖。小弟不胜感激。
MVC,EF 小小封装的更多相关文章
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(7)-DBSession的封装
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(7)-DBSession的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(4)-业务逻辑层的封装 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2) ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(24)-权限组的设计和实现(附源码)(终结)
ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用
ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(22)-为用户设置角色
ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列
http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开 ...
- MVC+EF+Spring.Net代码生成器
最近研究学习了MVC.EF等相关技术,写了一套项目架构.只要更改EF模型,生成数据库并转换T4模版.数据层和业务层就可以自动生成了. 主要用到的技术: 1.EF实体框架. 2.Spring.Net依赖 ...
- ASP.NET MVC + EF 利用存储过程读取大数据,1亿数据测试很OK
看到本文的标题,相信你会忍不住进来看看! 没错,本文要讲的就是这个重量级的东西,这个不仅仅支持单表查询,更能支持连接查询, 加入一个表10W数据,另一个表也是10万数据,当你用linq建立一个连接查询 ...
- 多层架构+MVC+EF+AUTOFAC+AUTOMAPPER
最近使用ligerui搭建了一个简单的教务管理demo,将重要的地方记录,也希望能帮到有这方面需要园友. 一.目录 1.多层架构+MVC+EF+AUTOFAC+AUTOMAPPER: 2.MVC中验证 ...
随机推荐
- TensorFlow TensorBoard使用
摘要: 1.代码例子 2.主要功能内容: 1.代码例子 <TensorFlow实战>使用MLP处理Mnist数据集并TensorBoard上显示 2.主要功能 执行TensorBoard程 ...
- 鸟哥的Linux私房菜笔记第四章
前言 对着<鸟哥的Linux私房菜-基础版>做了简化笔记.不想让自己知其然而不知其所然.所以写个博客让自己好好巩固一下,当然不可能把书中的内容全部写下来.在这里就简化一点把命令写下来. 让 ...
- php架构之路
鉴于最近跟小伙伴聊了很多PHP架构发展方向的问题,相关技术整理了一下,也顺便规划了一下自己的2019年. 一.常用的设计模式以及使用场景 以下是我用到过的 工厂,单例,策略,注册,适配,观察者,原 ...
- javascript正则表达式学习(二)--位置匹配
文章首发于sau交流学习社区 一.前言 正则表达式是匹配模式,要么是匹配字符,要么匹配位置. 其实在开发中很少用到匹配位置,本篇文章主要包含: 二.什么是位置 位置:相邻字符之间的位置. 三.如何匹配 ...
- java数据结构和算法01(数组的简单使用)
一直都对这一块没有什么想法,加上不怎么理解,只是懂个大概:最近突然感觉对数据结构和算法这块有点儿兴趣,决定还是尽量详细的看看这些结构和算法: 话说什么事数据结构和算法呢?现在我也说不上来,等我学的差不 ...
- Asp.Net Core&Jenkins持续交付到Windows Server
对于Linux平台上的持续集成和持续交付可以使用Docker快捷的完成任务,但是Windows Server下却不好使用,一般来讲,windows Server下最简单的发布方式是直接手动打包发布或是 ...
- Redis - NoSQL数据库技术(一)
NoSQL入门概述(一) 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 什么是NoSQL NoSQL(NoSQL - Not Only SQL),意“不仅仅是SQL”: 泛指非关系 ...
- Mqtt学习指南
MQTT是物联网应用当中一种非常重要的,轻量级的协议,现将该协议的重要学习资源整理一下,希望能为初学者提供一个完整的学习资源. MQTT是一个客户端服务端架构的发布/订阅模式的消息传输协议.它的设计思 ...
- 结合JDK源码看设计模式——单例模式
定义: 保证一个类仅有一个实例,并提供一个全局访问点 适用场景: 确保任何情况下这个对象只有一个实例 详解: 私有构造器 单利模式中的线程安全+延时加载 序列化和反序列化安全, 防止反射攻击 结合JD ...
- Android 9.0适配遇到的问题1
文章同步自javaexception 本周在适配Android 9.0,过程中碰到了小问题 问题1: SSL handshake timed out 解决办法: Android 9.0 开始,默认不允 ...