using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.Core.Objects;
using System.Data.Entity.Infrastructure;
using System.Data.Entity.Migrations;
using System.Data.Entity.Validation;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using EntityFramework.Extensions;
using System.Threading.Tasks;
//using log4net;
//using log4net.Core; namespace _6._0Test
{
/// <summary>
/// 上下文静态实体类
/// </summary>
public static class DbContentEntity
{
/// <summary>
/// 静态初始化
/// </summary>
static DbContentEntity()
{
if (string.IsNullOrEmpty(ConnectionString))
return;
if (_entities == null)
{
_entities = new TestEntities(ConnectionString);
_entities.Configuration.ValidateOnSaveEnabled = false;
}
if (_entities.Database.Connection.State == ConnectionState.Closed && _entities.Database.Connection.State != ConnectionState.Connecting)
{
_entities.Database.Connection.Open();
}
} /// <summary>
/// 静态连接字符串
/// </summary> public static string ConnectionString
{
get { return ConfigurationManager.ConnectionStrings["TestEntities"].ConnectionString; }
} /// <summary>
/// 静态实体
/// </summary>
private static TestEntities _entities;
/// <summary>
/// 对外实体
/// </summary>
public static TestEntities Entities
{
get
{
if (string.IsNullOrEmpty(ConnectionString))
return null;
return _entities ?? (_entities = new TestEntities(ConnectionString));
}
} } /// <summary>
/// 上下文类
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class ModelContext<T> where T : class
{
//日志,可自行拓展
//public static ILog Log = LogManager.GetLogger(typeof(T).Name); /// <summary>
/// 返回上下文实体
/// </summary>
protected TestEntities Entities
{
get { return DbContentEntity.Entities; }
} private DbSet<T> _model; protected DbSet<T> Model
{
get { return _model ?? (_model = Entities.Set<T>()); }
} #region =====查询用方法===== /// <summary>
/// 根据条件查询实体
/// </summary>
/// <param name="where">条件</param>
/// <returns>实体</returns>
public virtual T Get(Expression<Func<T, bool>> @where)
{ return Model.FirstOrDefault(where); } /// <summary>
/// 根据条件查询实体(异步)
/// </summary>
/// <param name="where">条件</param>
/// <returns>实体</returns>
public async virtual Task<T> GetAsync(Expression<Func<T, bool>> @where)
{ return await Model.FirstOrDefaultAsync(where); } /// <summary>
/// 根据条件查询实体集合(需自行tolist,自行异步)
/// </summary>
/// <param name="where">查询条件</param>
/// <returns></returns>
public virtual IQueryable<T> GetList(Expression<Func<T, bool>> @where)
{ return Model.AsNoTracking().Where(where); } /// <summary>
/// 根据条件查询实体集合(需自行tolist,自行异步)
/// </summary>
/// <param name="where">查询条件</param>
/// <returns></returns>
public async virtual Task<IQueryable<T>> GetListAsync(Expression<Func<T, bool>> @where)
{ return await Task.Run(()=>Model.AsNoTracking().Where(where)); } /// <summary>
/// 根据传进来的实体类型查询该实体的集合
/// </summary>
/// <typeparam name="TM">实体类型</typeparam>
/// <param name="where">查询条件</param>
/// <returns></returns>
public virtual IQueryable<TM> GetList<TM>(Expression<Func<TM, bool>> @where) where TM : class
{ var model = Entities.Set<TM>();
return model.AsNoTracking().Where(where); }
/// <summary>
/// 根据传进来的实体类型查询该实体(异步)
/// </summary>
/// <typeparam name="TM">实体类型</typeparam>
/// <param name="where">查询条件</param>
/// <returns></returns>
public async virtual Task<TM> GetAsync<TM>(Expression<Func<TM, bool>> @where) where TM : class
{ var model = Entities.Set<TM>();
return await model.FirstOrDefaultAsync(where); } /// <summary>
/// 根据条件查询实体数量
/// </summary>
/// <typeparam name="TM">实体类型</typeparam>
/// <param name="where">查询条件</param>
/// <returns></returns>
public virtual int Cout<TM>(Expression<Func<TM, bool>> @where) where TM : class
{
try
{
var model = Entities.Set<TM>();
return model.AsNoTracking().Count(where);
}
catch (DbEntityValidationException dbEx)
{
//Log.Error(dbEx + dbEx.Message);
return -;
}
catch (Exception ex)
{
//Log.Error(ex + ex.Message);
return -;
}
} /// <summary>
/// 根据条件查询实体数量(异步)
/// </summary>
/// <typeparam name="TM">实体类型</typeparam>
/// <param name="where">查询条件</param>
/// <returns></returns>
public async virtual Task<int> CoutAsync<TM>(Expression<Func<TM, bool>> @where) where TM : class
{
try
{
var model = Entities.Set<TM>();
return await model.AsNoTracking().CountAsync(where);
}
catch (DbEntityValidationException dbEx)
{
//Log.Error(dbEx + dbEx.Message);
return -;
}
catch (Exception ex)
{
//Log.Error(ex + ex.Message);
return -;
}
}
/// <summary>
/// 根据条件查询实体数量
/// </summary>
/// <param name="where"></param>
/// <returns></returns>
public async virtual Task<int> Count(Expression<Func<T, bool>> @where)
{
try
{
var model = Entities.Set<T>();
return await model.AsNoTracking().CountAsync(where);
}
catch (DbEntityValidationException dbEx)
{
//Log.Error(dbEx + dbEx.Message);
return -;
}
catch (Exception ex)
{
//Log.Error(ex + ex.Message);
return -;
}
} #endregion #region ====添加用方法====
/// <summary>
/// 添加实体
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
public virtual bool Add(T m)
{
try
{ Model.Add(m);
Entities.SaveChanges();
}
catch (DbEntityValidationException dbEx)
{
//Log.Error(dbEx + dbEx.Message);
return false;
}
catch (Exception ex)
{
//Log.Error(ex + ex.Message);
return false;
}
return true;
}
/// <summary>
/// 添加实体(异步)
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
public async virtual Task<bool> AddAsync(T m)
{
try
{ Model.Add(m);
await Entities.SaveChangesAsync();
}
catch (DbEntityValidationException dbEx)
{
//Log.Error(dbEx + dbEx.Message);
return false;
}
catch (Exception ex)
{
//Log.Error(ex + ex.Message);
return false;
}
return true;
} /// <summary>
/// 根据类型添加实体
/// </summary>
/// <typeparam name="TM"></typeparam>
/// <param name="tm"></param>
/// <returns></returns>
public virtual bool Add<TM>(TM tm) where TM : class
{
try
{
var model = Entities.Set<TM>();
model.Add(tm);
Entities.SaveChanges();
}
catch (DbEntityValidationException dbex)
{
//Log.Error(dbex + dbex.Message);
return false;
}
catch (Exception ex)
{
//Log.Error(ex + ex.Message);
return false;
}
return true;
} /// <summary>
/// 批量添加实体
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
public virtual bool AddRange(IEnumerable<T> m)
{ try
{
Model.AddRange(m);
Entities.SaveChanges();
}
catch (DbEntityValidationException dbEx)
{
//Log.Error(dbEx + dbEx.Message);
return false;
}
catch (Exception ex)
{
//Log.Error(ex + ex.Message);
return false;
}
return true;
}
/// <summary>
/// 批量添加实体(异步)
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
public async virtual Task<bool> AddRangeAsync(IEnumerable<T> m)
{ try
{
Model.AddRange(m);
await Entities.SaveChangesAsync();
}
catch (DbEntityValidationException dbEx)
{
//Log.Error(dbEx + dbEx.Message);
return false;
}
catch (Exception ex)
{
//Log.Error(ex + ex.Message);
return false;
}
return true;
} #endregion #region ====修改用方法====
/// <summary>
/// 修改实体
/// </summary>
/// <param name="t"></param>
/// <returns></returns>
public virtual bool Update(T t)
{ try
{ Model.Attach(t);
Entities.Entry(t).State = EntityState.Modified;
Entities.SaveChanges();
}
catch (DbEntityValidationException dbEx)
{
//Log.Error(dbEx + dbEx.Message);
return false;
}
catch (Exception ex)
{
//Log.Error(ex + ex.Message);
return false;
}
return true;
} /// <summary>
/// 修改实体(异步)
/// </summary>
/// <param name="t"></param>
/// <returns></returns>
public async virtual Task<bool> UpdateAsync(T t)
{ try
{ Model.Attach(t);
Entities.Entry(t).State = EntityState.Modified;
await Entities.SaveChangesAsync();
}
catch (DbEntityValidationException dbEx)
{
//Log.Error(dbEx + dbEx.Message);
return false;
}
catch (Exception ex)
{
//Log.Error(ex + ex.Message);
return false;
}
return true;
}
/// <summary>
/// 根据类型修改实体
/// </summary>
/// <typeparam name="TM"></typeparam>
/// <param name="tm"></param>
/// <returns></returns>
public virtual bool Update<TM>(TM tm) where TM : class
{
try
{
var model = Entities.Set<TM>();
model.Attach(tm);
Entities.Entry(tm).State = EntityState.Modified;
Entities.SaveChanges();
}
catch (DbEntityValidationException dbEx)
{
//Log.Error(dbEx + dbEx.Message);
return false;
}
catch (Exception ex)
{
//Log.Error(ex + ex.Message);
return false;
}
return true;
} /// <summary>
/// 批量更新数据
/// </summary>
/// <param name="where">更新数据的条件 如:u => u.FirstName == "firstname"</param>
/// <param name="ex">更新的值 如:u=>new User{FirstName = "newfirstname"}</param>
/// <returns>返回影响的条数</returns>
public virtual int Update(Expression<Func<T, bool>> @where, Expression<Func<T, T>> ex)
{
try
{
return Model.Where(where).Update(ex);
}
catch (DbEntityValidationException dbEx)
{
//Log.Error(dbEx + dbEx.Message);
return -;
}
catch (Exception e)
{
// Log.Error(e + e.Message);
return -;
}
} /// <summary>
/// 批量更新数据(异步)
/// </summary>
/// <param name="where">更新数据的条件 如:u => u.FirstName == "firstname"</param>
/// <param name="ex">更新的值 如:u=>new User{FirstName = "newfirstname"}</param>
/// <returns>返回影响的条数</returns>
public async virtual Task<int> UpdateAsync(Expression<Func<T, bool>> @where, Expression<Func<T, T>> ex)
{
try
{
return await Model.Where(where).UpdateAsync(ex);
}
catch (DbEntityValidationException dbEx)
{
//Log.Error(dbEx + dbEx.Message);
return -;
}
catch (Exception e)
{
// Log.Error(e + e.Message);
return -;
}
} /// <summary>
/// 添加或者修改实体(无则添加,有则修改)
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
public virtual bool AddOrUpdate(T[] m)
{
try
{
Model.AddOrUpdate(m);
Entities.SaveChanges();
}
catch (DbEntityValidationException dbEx)
{
// Log.Error(dbEx + dbEx.Message);
return false;
}
catch (Exception ex)
{
//Log.Error(ex + ex.Message);
return false;
}
return true;
} /// <summary>
/// 添加或者修改实体(无则添加,有则修改,异步)
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
public async virtual Task<bool> AddOrUpdateAsync(T[] m)
{
try
{
Model.AddOrUpdate(m);
await Entities.SaveChangesAsync();
}
catch (DbEntityValidationException dbEx)
{
// Log.Error(dbEx + dbEx.Message);
return false;
}
catch (Exception ex)
{
//Log.Error(ex + ex.Message);
return false;
}
return true;
} #endregion #region ===事务====
/// <summary>
/// 运行基本事务,返回bool值
/// </summary>
/// <param name="model"></param>
/// <returns></returns> protected bool RunTransaction(Action<DbSet<T>> model)
{ using (var transaction = Entities.Database.BeginTransaction())
{
try
{
model.Invoke(Model);
Entities.SaveChanges();
transaction.Commit();
return true;
}
catch (DbEntityValidationException dbEx)
{
//Log.Error("EXEC RunTransaction Error:" + dbEx + dbEx.Message);
return false;
}
catch (Exception ex)
{
//Log.Error("EXEC RunTransaction Error:" + ex + ex.Message);
transaction.Rollback();
return false; }
} }
/// <summary>
/// 运行基本事务,返回bool值(异步)
/// </summary>
/// <param name="model"></param>
/// <returns></returns> protected async Task<bool> RunTransactionAsync(Action<DbSet<T>> model)
{ using (var transaction = Entities.Database.BeginTransaction())
{
try
{
model.Invoke(Model);
await Entities.SaveChangesAsync();
transaction.Commit();
return true;
}
catch (DbEntityValidationException dbEx)
{
//Log.Error("EXEC RunTransaction Error:" + dbEx + dbEx.Message);
return false;
}
catch (Exception ex)
{
//Log.Error("EXEC RunTransaction Error:" + ex + ex.Message);
transaction.Rollback();
return false; }
} }
#endregion #region======删除用方法====
/// <summary>
/// 删除实体
/// </summary>
/// <param name="t"></param>
/// <returns></returns>
public virtual bool Remove(T t)
{
try
{
Model.Remove(t);
Entities.SaveChanges(); }
catch (DbEntityValidationException dbEx)
{
//Log.Error(dbEx + dbEx.Message);
return false;
}
catch (Exception ex)
{
//Log.Error(ex + ex.Message);
return false;
}
return true; } /// <summary>
/// 删除实体(异步)
/// </summary>
/// <param name="t"></param>
/// <returns></returns>
public async virtual Task<bool> RemoveAsync(T t)
{
try
{
Model.Remove(t);
await Entities.SaveChangesAsync(); }
catch (DbEntityValidationException dbEx)
{
//Log.Error(dbEx + dbEx.Message);
return false;
}
catch (Exception ex)
{
//Log.Error(ex + ex.Message);
return false;
}
return true; } /// <summary>
/// 根据类型删除实体
/// </summary>
/// <typeparam name="TM"></typeparam>
/// <param name="m"></param>
/// <returns></returns>
public virtual bool Remove<TM>(TM m) where TM : class
{
try
{
var model = Entities.Set<TM>();
model.Remove(m);
Entities.SaveChanges(); }
catch (DbEntityValidationException dbEx)
{
//Log.Error(dbEx + dbEx.Message);
return false;
}
catch (Exception ex)
{
//Log.Error(ex + ex.Message);
return false;
}
return true;
} /// <summary>
///批量删除实体
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
public virtual int RemoveRange(IEnumerable<T> m)
{ try
{
Model.RemoveRange(m);
return Entities.SaveChanges();
}
catch (DbEntityValidationException dbEx)
{
//Log.Error(dbEx + dbEx.Message);
return -;
}
catch (Exception ex)
{
//Log.Error(ex + ex.Message);
return -;
} } /// <summary>
///批量删除实体(异步)
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
public async virtual Task<int> RemoveRangeAsync(IEnumerable<T> m)
{ try
{
Model.RemoveRange(m);
return await Entities.SaveChangesAsync();
}
catch (DbEntityValidationException dbEx)
{
//Log.Error(dbEx + dbEx.Message);
return -;
}
catch (Exception ex)
{
//Log.Error(ex + ex.Message);
return -;
} } /// <summary>
/// 根据类型批量删除实体
/// </summary>
/// <typeparam name="TM"></typeparam>
/// <param name="tmMs"></param>
/// <returns></returns>
public virtual int RemoveRange<TM>(IEnumerable<TM> tmMs) where TM : class
{
try
{
var model = Entities.Set<TM>();
model.RemoveRange(tmMs);
return Entities.SaveChanges();
}
catch (DbEntityValidationException dbEx)
{
//Log.Error(dbEx + dbEx.Message);
return -;
}
catch (Exception ex)
{
//Log.Error(ex + ex.Message);
return -; } }
#endregion } }

..求大神指点一下..哪里有问题..我在改改..

自己封装了一个EF的上下文类.,分享一下,顺便求大神指点的更多相关文章

  1. PHP封装的一个单例模式Mysql操作类

    掌握满足单例模式的必要条件----三私一公. ①私有的构造方法-为了防止在类外使用new关键字实例化对象. ②私有的成员属性-为了防止在类外引入这个存放对象的属性. ③私有的克隆方法-为了防止在类外通 ...

  2. 线段树总结 (转载 里面有扫描线类 还有NotOnlySuccess线段树大神的地址)

    转载自:http://blog.csdn.net/shiqi_614/article/details/8228102 之前做了些线段树相关的题目,开学一段时间后,想着把它整理下,完成了大牛NotOnl ...

  3. #String类简述(小白理解,小白编写,欢迎大神指点,小白跪谢)

    @ 目录 一.前言(可忽略) 二.String变量的认知 三.String类的构造方法 四.String类的基本方法 4.1 toString()方法 4.2 equals()方法 4.3 equal ...

  4. php 自制简单路由类 望大神指点

    class route{ /** @var null 模块 */ private static $module = null; /** @var null 控制器 */ private static ...

  5. EF 请求数据是缓存 求大神解释

    // //AliexpressEntities MyaliexpressEntities 为了事物一致性 在别的方法里面传过来的 实质还是 (  AliexpressEntities aliexpre ...

  6. 14.翻译系列:从已经存在的数据库中生成上下文类和实体类【EF 6 Code-First系列】

    原文链接:https://www.entityframeworktutorial.net/code-first/code-first-from-existing-database.aspx EF 6 ...

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

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

  8. 基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil

    基于Dapper二次封装了一个易用的ORM工具类:SqlDapperUtil,把日常能用到的各种CRUD都进行了简化封装,让普通程序员只需关注业务即可,因为非常简单,故直接贴源代码,大家若需使用可以直 ...

  9. Timber(对Log类封装的一个工具)

    Timber(对Log类封装的一个工具) https://blog.csdn.net/hzl9966/article/details/51314137 https://www.jianshu.com/ ...

随机推荐

  1. 背后的故事之 - 快乐的Lambda表达式(一)

    快乐的Lambda表达式(二) 自从Lambda随.NET Framework3.5出现在.NET开发者眼前以来,它已经给我们带来了太多的欣喜.它优雅,对开发者更友好,能提高开发效率,天啊!它还有可能 ...

  2. 【开源】.Net Api开放接口文档网站

    开源地址:http://git.oschina.net/chejiangyi/ApiView 开源QQ群: .net 开源基础服务  238543768 ApiView .net api的接口文档查看 ...

  3. Javascript实用方法

    这篇我主要记录一些在工作中常用的.实用的方法. String trim 字符串方法中的trim主要用来去空格使用,很多时候,在后台做参数处理的时候,我们都会使用该方法,比如在获取用户输入的账户时 va ...

  4. Ajax实现原理,代码封装

    都知道实现页面的异步操作需要使用Ajax,那么Ajax到是怎么实现异步操作的呢? 首先需要认识一个对象 --> XMLHttpRequest 对象 --> Ajax的核心.它有许多的属性和 ...

  5. Openfiler配置RAC共享存储

    将 Openfiler 用作 iSCSI 存储服务器,主要操作步骤如下: 1.设置 iSCSI 服务 2.配置网络访问 3.指定物理存储器并对其分区 4.创建新的卷组 5.创建所有逻辑卷 6.为每个逻 ...

  6. java时间

    Calendar.getInstance().getTime() 获取当前时间(包括星期和时区 CST China Standard Time):  Fri Jan 06 21:03:36 CST 2 ...

  7. iOS--->微信支付小结

    iOS--->微信支付小结 说起支付,除了支付宝支付之外,微信支付也是我们三方支付中最重要的方式之一,承接上面总结的支付宝,接下来把微信支付也总结了一下 ***那么首先还是由公司去创建并申请使用 ...

  8. 【教程】SQLite数据库修复

    SQLite 大家都知道,就不多说了. 有时候数据量大了,或者存储过程中出现异常,数据库就可能会出问题. 这是以前公司产品出现过的问题,导致软件都打不开了,我花了不少时间才解决的,趁现在有空贡献出来. ...

  9. JBPM

    JBPM简介 什么是jbpm JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理.工作流.服务协作等领域的一个开源的.灵活的.易扩 ...

  10. Xamarin和微软发起.NET基金会

    新闻<微软宣布成立.NET基金会全面支持开源项目 包括C#编译器Roslyn>,看到大家对微软的开放都很兴奋.在此之前在.NET社区也有了大量的开源项目,所列的24个项目也是早就开源,这次 ...