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中验证 ...
随机推荐
- javaWeb使用POI操作Excel
1.为项目添加POI POI官网链接 点进去之后下载(上边的是编译好的类,下边的是源代码) 解压文件夹,把下面三个文件复制到WebComtent>WEB-INF>lib文件夹下 再把这三个 ...
- IOT高性能服务器实现之路
市场动态 物联网市场在2018年第一季度/第二季度出现了意想不到的加速,并将使用的物联网设备总数提升至7B.这是IoT Analytics最新“ 物联网和短期展望状态 ”更新中的众多发现之一. 全面的 ...
- c#Socket服务器与客户端的开发(1)
上个项目中用到了Socket通讯,项目中直接借助SuperSocket实现,但是我觉得这毕竟是一个我没接触过的东西,所以也顺便学习了一下原生socket的使用,做了一个socket服务器与客户端的开发 ...
- Unity 用ml-agents机器学习造个游戏AI吧(1)(Windows环境配置)
前言:以前觉得机器学习要应用于游戏AI,还远得很. 最近看到一些资料后,突发兴致试着玩了玩Unity机器学习,才发觉机器学习占领游戏AI的可能性和趋势. Unity训练可爱柯基犬Puppo 机器学习训 ...
- python assert的用处
python assert 句语格式及用法很简单.通常程序在运行完之后抛出异常,使用assert可以在出现有异常的代码处直接终止运行. 而不用等到程序执行完毕之后抛出异常. python assert ...
- 同事搭一个测试RAC说节点2发现idle了,报ORA-00304
[oracle@testrac2 11204]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Wed Jan 16 1 ...
- [20190130]删除tab$记录的恢复.txt
[20190130]删除tab$记录的恢复.txt --//网上提到许多删除tab$的案例,主要原因在于没有从官方正规渠道下载oracle版本,还有一些来自工具里面带有一些脚本删除tab$记录. -- ...
- Windows系统桌面右击反应变慢、卡顿问题解决方法
博主的电脑是Win10系统,在修改完系统的用户文件夹名后,桌面右击出现了反应卡顿的现象,并且点击输入法,也变得卡顿.问题解决后,于是想简单记录一下. 还是注册表的问题,使用Win+R快捷键,打开运行, ...
- 关于wordpress升级遇到的问题
前几天登录我的博客后台,发现可以升级了,顺手点了一下,但顺接出现了几个报错,然后这里记录一下解决方法: 1.出现“另一更新正在进行”的错误解决: 这是因为可能你上次更新失败了,或者WordPress在 ...
- .net momeryStream 读取为空问题
问题 stream读取错误 我需要把用户上传的图片,加水印,然后保存到阿里云的oss.保存成功,但是保存的数据为空.唯一的异常 :ReadTimeout = “newPicStream.ReadTim ...