EF 5.0 帮助类
EF 5.0 帮助类
加入命名空间:
- using System;
- using System.Data;
- using System.Data.Entity;
- using System.Data.Entity.Infrastructure;
- using System.Linq;
接口:
- public interface IEFRepository<TEntity> where TEntity : class
- {
- bool AddEntity(TEntity entity);
- bool UpdateEntity(TEntity entity);
- bool UpdateEntity(IEnumerable<TEntity> entities);
- bool DeleteEntity(int ID);
- bool DeleteEntity(TEntity entity);
- bool DeleteEntity(Expression<Func<TEntity, bool>> predicate);
- bool DeleteEntity(IEnumerable<TEntity> entities);
- IList<TEntity> LoadEntities(Func<TEntity, bool> whereLambda);
- IList<TEntity> LoadEntities(int pageIndex = 1, int pageSize = 30, Func<TEntity, bool> whereLambda = null);
- TEntity FindByID(int ID);
- }
具体类:
- //EF5.0的写法
- public class EFRepository<TEntity> : IEFRepository<TEntity> where TEntity : class
- {
- #region 单利模式
- public static EFRepository<TEntity> Instance = new EFRepository<TEntity>();
- public EFRepository( )
- {
- Create();
- }
- #endregion
- /// <summary>
- /// 获取 当前使用的数据访问上下文对象
- /// </summary>
- public DbContext Context
- {
- get
- {
- return EFDbContextHelper.Context;
- }
- }
- public bool AddEntity(TEntity entity)
- {
- EntityState state = Context.Entry(entity).State;
- if (state == EntityState.Detached)
- {
- Context.Entry(entity).State = EntityState.Added;
- }
- Context.SaveChanges();
- return true;
- }
- public bool UpdateEntity(TEntity entity)
- {
- Context.Set<TEntity>().Attach(entity);
- Context.Entry<TEntity>(entity).State = EntityState.Modified;
- return Context.SaveChanges() > 0;
- }
- public bool UpdateEntity(IEnumerable<TEntity> entities)
- {
- try
- {
- Context.Configuration.AutoDetectChangesEnabled = false;
- foreach (TEntity entity in entities)
- {
- UpdateEntity(entity);
- }
- return true;
- }
- finally
- {
- Context.Configuration.AutoDetectChangesEnabled = true;
- }
- }
- public bool DeleteEntity(int ID)
- {
- TEntity entity = FindByID(ID);
- return DeleteEntity(entity);
- }
- public bool DeleteEntity(TEntity entity)
- {
- Context.Set<TEntity>().Attach(entity);
- Context.Entry<TEntity>(entity).State = EntityState.Deleted;
- return Context.SaveChanges() > 0;
- }
- public bool DeleteEntity(System.Linq.Expressions.Expression<Func<TEntity, bool>> predicate)
- {
- List<TEntity> entities = Set().Where(predicate).ToList();
- return Context.SaveChanges() > 0;
- }
- public bool DeleteEntity(IEnumerable<TEntity> entities)
- {
- try
- {
- Context.Configuration.AutoDetectChangesEnabled = false;
- foreach (TEntity entity in entities)
- {
- DeleteEntity(entity);
- }
- return true;
- }
- finally
- {
- Context.Configuration.AutoDetectChangesEnabled = true;
- }
- }
- public IList<TEntity> LoadEntities(Func<TEntity, bool> whereLambda)
- {
- if (whereLambda != null)
- return Context.Set<TEntity>().Where<TEntity>(whereLambda).AsQueryable().ToList();
- else
- return Context.Set<TEntity>().AsQueryable().ToList();
- }
- public IList<TEntity> LoadEntities(int pageIndex = 1, int pageSize = 30, Func<TEntity, bool> whereLambda = null)
- {
- int skinCount = (pageIndex - 1) * pageSize;
- if (whereLambda != null)
- return Set()
- .Where<TEntity>(whereLambda)
- .Skip(skinCount)
- .Take(pageSize)
- .ToList();
- else
- return Set()
- .Skip(skinCount)
- .Take(pageSize)
- .ToList();
- }
- public DbSet<TEntity> Set( )
- {
- return Context.Set<TEntity>();
- }
- public TEntity FindByID(int ID)
- {
- return Set().Find(ID);
- }
- private TEntity Create( )
- {
- return Context.Set<TEntity>().Create();
- }
- }
使用:
准备实体类
- /// <summary>
- /// 实体类楼层管理 。(属性说明自动提取数据库字段的描述信息)
- /// </summary>
- [Serializable]
- public class Floor
- {
- public int ID { get; set; }
- [Category("楼层名称")]
- public string f_Name { get; set; }
- [Category("备注")]
- public string f_Remark { get; set; }
- }
使用EF帮助类调用
- /// <summary>
- /// 数据上下文 Db3983Context
- /// </summary>
- public class Db3983Context : EFDbContext
- {
- /// <summary>
- /// 构造函数
- /// </summary>
- public Db3983Context()
- : base("3983")
- {
- }
- /// <summary>
- /// 楼层管理
- /// </summary>
- public DbSet<Floor> Floor { get; set; }
- }
- /// <summary>
- /// 应用程序的主入口点。
- /// </summary>
- [STAThread]
- static void Main( )
- {
- EFDbContextHelper.Context = new Db3983Context();
- Floor floor = new Floor();
- floor.f_Name = "罗敏贵";
- floor.f_Remark = "我这个人看上去很靠谱,长得也很高有一米八五,也很帅气,千万不要迷恋哥,哥只是传说。";
- EFRepository<Floor>.Instance.AddEntity(floor);
- }
扩展:
其他ORM只要现实上面的接口就可以了,然后在配置文件制定使用哪个ORM就可以做到扩展了。
http://www.cnblogs.com/lori/archive/2012/10/19/2731801.html
EF 5.0 帮助类的更多相关文章
- EF 5.0 帮助类 增删改查
原文地址:http://www.cnblogs.com/luomingui/p/3362813.html EF 5.0 帮助类 加入命名空间: using System; using System.D ...
- 3.EF 6.0 Code-First实现增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-entity-framework-5-0-code- ...
- EF 6.0
最近又开始研究EF框架了 哎 搞的东西太杂了 网上的参考了一篇博客 但是他是基于EF 4.0之前做的 所以自己基于他的博客来构造EF 6.0的使用基础 命名空间不同: 旧版本:using System ...
- ASP。netcore,Angular2 CRUD动画使用模板包,WEB API和EF 1.0.1
下载Angular2ASPCORE.zip - 1 MB 介绍 在本文中,让我们看看如何创建一个ASP.NET Core CRUD web应用程序与Angular2动画使用模板包,web API和EF ...
- EF Core3.0+ 通过拦截器实现读写分离与SQL日志记录
前言 本文主要是讲解EF Core3.0+ 通过拦截器实现读写分离与SQL日志记录 注意拦截器只有EF Core3.0+ 支持,2.1请考虑上下文工厂的形式实现. 说点题外话.. 一晃又大半年没更新技 ...
- Aspose.Cells for .NET 8.5.0 工具类
基于 Aspose.Cells for .NET 8.5.0 工具类, Aspose.Cells for .NET 8.5.0 这个自己去CSDN下载里面有破解的,没有破解的导出excel的时候会(A ...
- 5.翻译:EF基础系列---EF中的上下文类
原文地址:http://www.entityframeworktutorial.net/basics/context-class-in-entity-framework.aspx EF中的上下文类是一 ...
- ADO.NET Entity Framework CodeFirst 如何输出日志(EF 5.0)
ADO.NET Entity Framework CodeFirst 如何输出日志(EF4.3) 用的EFProviderWrappers ,这个组件好久没有更新了,对于SQL执行日志的解决方案的需求 ...
- 一步步学习EF Core(3.EF Core2.0路线图)
前言 这几天一直在研究EF Core的官方文档,暂时没有发现什么比较新的和EF6.x差距比较大的东西. 不过我倒是发现了EF Core的路线图更新了,下面我们就来看看 今天我们来看看最新的EF Cor ...
随机推荐
- 【Visual Lisp】驱动器、目录、文件和注册表
;;驱动器.目录.文件.和注册表;;★★★01.获取并创建驱动器盘符组成的表★★★(setq Drives (vlax-get-property (vlax-create-object "S ...
- Eclipse中.setting目录下文件介绍
Eclipse项目中系统文件介绍 一. 写在前面 文章较长,可以直接到感兴趣的段落,或者直接关键字搜索: 请原谅作者掌握的编程语言少,这里只研究Java相关的项目: 每一个文件仅仅做一个常见内容的简单 ...
- 【Win10】解决 模拟器调试手机 错误-> 引导阶段... 无法找到指定路径......\2052\msdbgui.dll
去弄几天的Web服务,又弄了几天的CefSharp,都是给其它组的同学做了一下支持,终于又可以回来玩下Win10啦. 今天想试一下UWP在手机上的效果,就找了台WP手机开始升级,结果下载速度遥遥无期, ...
- java开发常用jar包介绍(转载)
jta.jar 标准JTA API必要 commons-collections.jar 集合类 必要 antlr.jar ANother Tool for Language Recognition ...
- eclipse 远程调试
http://blog.sina.com.cn/s/blog_86a6730b0101iean.html 注:远程服务器端可用以下方式替代: iptables -I from_external 3 - ...
- AT&T Assembly for Linux and Mac (sys_exit)
Exit() in C : (sys_exit.c) int main(void) { ; } Exit() in AT&T for Linux: (sys_exit.s) .section ...
- Rails下cloud datastore的使用
Rails下cloud datastore的使用 背景 部门有一个项目要用Ruby做 WebAPI,DB使用关系型数据库Cloud Sql和非关系型数据库Cloud Datastore . 还不了 ...
- Java的从浅至深绕坑而行的学习
package day02; /** * 1:java初学习,避免面试时一些HR挖的坑. * @author biexiansheng * */ public class Test02 { publi ...
- JAVA开发工具eclipse中@author怎么改
1:JAVA开发工具eclipse中@author怎么改,开发的时候为了注明版权信息. 用eclipse开发工具默认的是系统用户,那么怎么修改呢 示例如图所示 首先打开Eclipse--->然后 ...
- 分享45个设计师应该见到的新鲜的Web移动设备用户界面PSD套件
对于一个网页设计师来说做一个好的PSD模板是非常有挑战性的一项任务,虽然PSD的模板简化了设计任务,但找出高质量的PSD文件,可以自由使用,是一 项艰巨的任务.你必须通过许多网页去找出一个极少数的PS ...