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. Oracle 的基本操作符

    != 不等于 select empno,ename,job from scott.emp where job!='manager' ^= 不等于 select empno,ename,job from ...

  2. angular2系列教程(六)两种pipe:函数式编程与面向对象编程

    今天,我们要讲的是angualr2的pipe这个知识点. 例子

  3. My TWI

    前言 对TWI没有什么特别的印象,因为有一个更出名的TWU,而我去年又刚好错过了它,因此TWU的光辉完全掩盖了TWI.对TWI印象最深的是在邮件中看到的38th北京的这期,看到他们的图文记录,在圈子中 ...

  4. 【HanLP】资料链接汇总

    Java中调用HanLP配置 HanLP自然语言处理包开源官方文档 了解HanLP的全部 自然语言处理HanLP 开源自由的汉语言处理包主页 GitHub源码 基于hanLP的中文分词详解-MapRe ...

  5. Java 为值传递而不是引用传递

    ——reference Java is Pass by Value and Not Pass by Reference 其实这个问题是一个非常初级的问题,相关的概念初学者早已掌握,但是时间长了还是容易 ...

  6. TFS 测试用例步骤数据统计

    TFS系统集成了一套BI系统,基于SQL Server的Analysis Service进行实现的.通过这几年的深入使用,能够感触到这个数据数据仓库模型是多么的优秀,和微软官方提供的数据仓库示例Adv ...

  7. 【工具使用】mac电脑使用技巧

    本文地址 分享提纲: 1.  mac命令行和finder的交互 2. 一些mac的插件 3. 一些开发的配置 1.mac命令行和findder交互           1)命令行中打开当前文件夹: o ...

  8. Web安全开发之验证码设计不当引发的撞库问题

    感谢某电商平台安全工程师feiyu跟我一起讨论这个漏洞的修复.以往在安全测试的过程中后台经常存在验证码不失效果造成的撞库问题,甚至在一些银行或者电商的登录与查存页面同样存在这个问题,一旦造成撞库无论对 ...

  9. 【道德经】漫谈实体、对象、DTO及AutoMapper的使用

    写在前面 实体和值对象 实体和对象 故常无欲以观其妙,常有欲以观其徼 初始实体和演化实体 代码中的DTO AutoMapper实体转换 后记 实体(Entity).对象(Object).DTO(Dat ...

  10. 《深入理解Java虚拟机》类文件结构

    上节学习回顾 在上一节当中,主要以自己的工作环境简单地介绍了一下自身的一些调优或者说是故障处理经验.所谓百变不离其宗,这个宗就是我们解决问题的思路了. 本节学习重点 在前面几章,我们宏观地了解了虚拟机 ...