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 帮助类的更多相关文章

  1. EF 5.0 帮助类 增删改查

    原文地址:http://www.cnblogs.com/luomingui/p/3362813.html EF 5.0 帮助类 加入命名空间: using System; using System.D ...

  2. 3.EF 6.0 Code-First实现增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-entity-framework-5-0-code- ...

  3. EF 6.0

    最近又开始研究EF框架了 哎 搞的东西太杂了 网上的参考了一篇博客 但是他是基于EF 4.0之前做的 所以自己基于他的博客来构造EF 6.0的使用基础 命名空间不同: 旧版本:using System ...

  4. ASP。netcore,Angular2 CRUD动画使用模板包,WEB API和EF 1.0.1

    下载Angular2ASPCORE.zip - 1 MB 介绍 在本文中,让我们看看如何创建一个ASP.NET Core CRUD web应用程序与Angular2动画使用模板包,web API和EF ...

  5. EF Core3.0+ 通过拦截器实现读写分离与SQL日志记录

    前言 本文主要是讲解EF Core3.0+ 通过拦截器实现读写分离与SQL日志记录 注意拦截器只有EF Core3.0+ 支持,2.1请考虑上下文工厂的形式实现. 说点题外话.. 一晃又大半年没更新技 ...

  6. Aspose.Cells for .NET 8.5.0 工具类

    基于 Aspose.Cells for .NET 8.5.0 工具类, Aspose.Cells for .NET 8.5.0 这个自己去CSDN下载里面有破解的,没有破解的导出excel的时候会(A ...

  7. 5.翻译:EF基础系列---EF中的上下文类

    原文地址:http://www.entityframeworktutorial.net/basics/context-class-in-entity-framework.aspx EF中的上下文类是一 ...

  8. ADO.NET Entity Framework CodeFirst 如何输出日志(EF 5.0)

    ADO.NET Entity Framework CodeFirst 如何输出日志(EF4.3) 用的EFProviderWrappers ,这个组件好久没有更新了,对于SQL执行日志的解决方案的需求 ...

  9. 一步步学习EF Core(3.EF Core2.0路线图)

    前言 这几天一直在研究EF Core的官方文档,暂时没有发现什么比较新的和EF6.x差距比较大的东西. 不过我倒是发现了EF Core的路线图更新了,下面我们就来看看 今天我们来看看最新的EF Cor ...

随机推荐

  1. ElasticSearch介绍 【未完成】

    ElasticSearch应用于搜索是一个不错的选择,虽有Lucene,但ELK的搜索方便. http://joelabrahamsson.com/elasticsearch-101/ 一.下载 ht ...

  2. Robot Framework-Mac版本安装

    Robot Framework-Mac版本安装 Robot Framework-Windows版本安装 Robot Framework-工具简介及入门使用 Robot Framework-Databa ...

  3. CF - 405B - Domino Effect

    my english is poor 给你一列全部站立的骨牌,同时向左或向右推其中的几个 保证推得方式为: ...左,右,左,右,左... 即不存在两个相邻的又往相同方向推倒的 刚开始是从左往右一个一 ...

  4. Makecert.exe(证书创建工具)

    Makecert.exe(证书创建工具) .NET Framework 4.5   其他版本   2(共 3)对本文的评价是有帮助 - 评价此主题   证书创建工具生成仅用于测试目的的 X.509 证 ...

  5. WebApi与手机客户端通信安全机制

    最近公司有几个项目需要开发手机客户端,服务器端选用WebApi,那么如何保证手机客户端在请求服务器端时数据不被篡改,如何保证一个http请求的失效机制,下面总结一下我们在项目中针对这两个问题的解决方案 ...

  6. .NET跨平台:再见dnx,你好dotnet cli

    昨天在github上dnx的一个issue中看到这样一段话: we're retiring dnx/dnu/dnvm toolchain and will move to dotnet CLI in ...

  7. os.popen(command)

    command="/usr/local/sbin/xxx_cmd" os.popen(command) xxx_cmd是自己编译的二进制文件,如果不加上全路径/usr/local/ ...

  8. 04-Vue入门系列之Vue事件处理

    4.1. 监听事件的Vue处理 Vue提供了协助我们为标签绑定时间的方法,当然我们可以直接用dom原生的方式去绑定事件.Vue提供的指令进行绑定也是非常方便,而且能让ViewModel更简洁,逻辑更彻 ...

  9. python脚本实现集群检测和管理

    python脚本实现集群检测和管理 场景是这样的:一个生产机房,会有很多的测试机器和生产机器(也就是30台左右吧),由于管理较为混乱导致了哪台机器有人用.哪台机器没人用都不清楚,从而产生了一个想法-- ...

  10. 升级webapi依赖的Newtonsoft.json的版本

    随着微软日渐重视开源社区的贡献,微软在自己的产品中往往也会集成开源的第三方库. 比如System.Net.Http.Foramatting.dll 就依赖于Newtonsoft.json v4.5. ...