让EF支持sql语句
BaseDal类:
public class BaseDal : IDisposable
{
#region 事件
internal Func<bool> DBCommitting;
internal Action<bool> DBCommitted; internal Func<object, bool> DBAdding;
internal Action<object, bool> DBAdded;
internal Func<object, bool> DBUpdating;
internal Action<object, bool> DBUpdated;
internal Func<object, bool> DBDeleting;
internal Action<object, bool> DBDeleted; internal Func<object, bool, bool> DBSaveOrUpdating;
internal Action<object, bool, bool> DBSaveOrUpdated;
internal Func<object, bool, bool> DBSaveOrUpdatingForList;
internal Action<object, bool, bool> DBSaveOrUpdatedForList;
#endregion private DBEntities db = new DBEntities();//实体模型名 private bool isTransaction = false; public bool IsBeginTranscation { get { return isTransaction; } } public IQueryable<T> GetEntity<T>() where T : class
{
return db.Set<T>().AsNoTracking().AsQueryable<T>();
} /// <summary>
/// 添加
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="lst"></param>
/// <returns></returns>
public bool Add<T>(List<T> lst, bool isCommit = true) where T : class
{
foreach (var item in lst)
{
db.Entry<T>(item).State = System.Data.EntityState.Added;
} if (isCommit && !isTransaction)
{
bool isContinue = true;
if (DBAdding != null) isContinue = DBAdding(lst);
if (isContinue)
{
var ret = db.SaveChanges() > ;
if (DBAdded != null) DBAdded(lst, ret); return ret;
}
else
return false;
}
else
return false; } /// <summary>
/// 根据条件删除
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="predicate"></param>
/// <returns></returns>
public bool DeleteByCondition<T>(Expression<Func<T, bool>> predicate, bool isCommit = true) where T : class
{
db.Set<T>().Where<T>(predicate).ToList<T>().ForEach(d =>
{
db.Entry<T>(d).State = System.Data.EntityState.Deleted;
});
if (isCommit && !isTransaction)
{
bool isContinue = true;
if (DBDeleting != null) isContinue = DBDeleting(predicate);
if (isContinue)
{
var ret = db.SaveChanges() > ;
if (DBDeleted != null) DBDeleted(predicate, ret);
return ret;
}
else
return false;
}
else
return false;
} public bool UpdateByCondition<T>(Action<T> updateExpression, Expression<Func<T, bool>> predicate, bool isCommit = true) where T : class
{
var lstDB = db.Set<T>().Where<T>(predicate).ToList<T>();
var lstEF = db.Set<T>().Local.AsQueryable().Where(predicate).ToList<T>();
lstDB.AddRange(lstEF);
lstDB.ForEach(item =>
{
updateExpression(item);
if (db.Entry<T>(item).State != EntityState.Deleted && db.Entry<T>(item).State != EntityState.Added)
db.Entry<T>(item).State = EntityState.Modified;
}); if (isCommit && !isTransaction)
{
bool isContinue = true;
if (DBUpdating != null) isContinue = DBUpdating(predicate);
if (isContinue)
{
var ret = db.SaveChanges() > ;
if (DBUpdated != null) DBUpdated(predicate, ret); return ret;
}
else
return false;
}
else
{
return false;
}
} public bool SaveOrUpdate<T>(T entity, bool isAdd = false, bool isCommit = true) where T : class
{
if (isAdd)
db.Set<T>().Add(entity);
else
db.Entry(entity).State = System.Data.EntityState.Modified; if (isCommit && !isTransaction)
{
bool isContinue = true;
if (DBSaveOrUpdating != null) isContinue = DBSaveOrUpdating(entity, isAdd);
if (isContinue)
{
var ret = db.SaveChanges() > ;
if (DBSaveOrUpdated != null) DBSaveOrUpdated(entity, isAdd, ret);
return ret;
}
else
return false;
}
else
return false; } public bool SaveOrUpdateForList<T>(List<T> entities, bool isAdd = false, bool isCommit = true) where T : class
{
foreach (T entity in entities)
{
if (isAdd)
db.Set<T>().Add(entity);
else
db.Entry(entity).State = System.Data.EntityState.Modified;
}
if (isCommit && !isTransaction)
{
bool isContinue = true;
if (DBSaveOrUpdatingForList != null) isContinue = DBSaveOrUpdatingForList(entities, isAdd);
if (isContinue)
{
var ret = db.SaveChanges() > ;
if (DBSaveOrUpdatedForList != null) DBSaveOrUpdatedForList(entities, isAdd, ret); return ret;
}
else
return false;
}
else
return false;
} public int ExecuteSqlCommand(string sql, bool isCommit = true)
{
db.Database.ExecuteSqlCommand(sql);
if (isCommit && !isTransaction)
return db.SaveChanges();
else
return ;
} public int ExecuteSqlCommand(string sql, bool isCommit, params object[] parameters)
{
db.Database.ExecuteSqlCommand(sql, parameters);
if (isCommit && !isTransaction)
return db.SaveChanges();
return ;
} /// <summary>
/// 执行存储过程 无超时
/// </summary>
/// <param name="ProcName"></param>
/// <param name="parList"></param>
public void ExecPro(string ProcName, List<SqlParameter> parList)
{
DbConnection conn = db.Database.Connection;
if (conn.State == ConnectionState.Closed)
conn.Open();
DbCommand cmd = conn.CreateCommand();
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.CommandText = ProcName;
cmd.CommandTimeout = ;
foreach (SqlParameter par in parList)
{
cmd.Parameters.Add(par);
} cmd.ExecuteNonQuery();
} public void BeginTranscation()
{
isTransaction = true;
} public bool Commit()
{
if (isTransaction)
{
bool isContinue = true;
isTransaction = false;
if (DBCommitting != null) isContinue = DBCommitting();
if (isContinue)
{
var ret = db.SaveChanges() > ;
if (DBCommitted != null) DBCommitted(ret);
return ret;
}
else
return false;
}
else
return false;
} /// <summary>
/// 执行SQL查询语句
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public List<T> FindEntityListBySql<T>(string sql)
{
return db.Database.SqlQuery<T>(sql).ToList<T>();
} public void Close()
{
if (db != null)
{
db.Dispose();
db = null;
}
} public void Dispose()
{
if (db != null)
{
db.Dispose();
db = null;
}
}
}
DBEvent类
public class DBEvent<T> where T : class
{
protected BaseDal db; public DBEvent(BaseDal db)
{
this.db = db;
db.DBUpdating = Updating;
db.DBUpdated = Updated;
db.DBAdding = Adding;
db.DBAdded = Added;
db.DBDeleting = Deleting;
db.DBDeleted = Deleted;
db.DBSaveOrUpdating = SaveOrUpdating;
db.DBSaveOrUpdated = SaveOrUpdated;
db.DBSaveOrUpdatingForList = SaveOrUpdatingForList;
db.DBSaveOrUpdatedForList = SaveOrUpdatedForList;
db.DBCommitting = Commintting;
db.DBCommitted = Committed;
} public delegate bool BeforeUpdateEvent(Expression<Func<T, bool>> predicate); public delegate void AfterUpdateEvent(Expression<Func<T, bool>> predicate, bool isSuccess); public delegate bool BeforeAddEvent(List<T> lstEntity); public delegate void AfterAddEvent(List<T> lstEntity, bool isSuccess); public delegate bool BeforeDeleteEvent(Expression<Func<T, bool>> predicate); public delegate void AfterDeleteEvent(Expression<Func<T, bool>> predicate, bool isSuccess); public delegate bool BeforeSaveOrUpdateEvent(T entity, bool isAdd); public delegate void AfterSaveOrUpdateEvent(T entity, bool isAdd, bool isSuccess); public delegate bool BeforeSaveOrUpdatingForListEvent(List<T> lstEntity, bool isAdd); public delegate bool AfterSaveOrUpdatingForListEvent(List<T> lstEntity, bool isAdd, bool isSuccess); public delegate bool BeforeCommitEvent(); public delegate void AfterCommitEvent(bool isSuccess); public BeforeUpdateEvent BeforeUpdate { set; get; } public AfterUpdateEvent AfterUpdate { set; get; } public BeforeAddEvent BeforeAdd { get; set; } public AfterAddEvent AfterAdd { get; set; } public BeforeDeleteEvent BeforeDelete { get; set; } public AfterDeleteEvent AfterDelete { get; set; } public BeforeSaveOrUpdateEvent BeforeSaveOrUpdate { get; set; } public AfterSaveOrUpdateEvent AfterSaveOrUpdate { get; set; } public BeforeSaveOrUpdatingForListEvent BeforeSaveOrUpdatingForList { get; set; } public AfterSaveOrUpdatingForListEvent AfterSaveOrUpdatingForList { get; set; } public BeforeCommitEvent BeforeCommit { get; set; } public AfterCommitEvent AfterCommit { get; set; } private bool Updating(object arg)
{
Expression<Func<T, bool>> predicate = arg as Expression<Func<T, bool>>;
if (BeforeUpdate != null)
return BeforeUpdate(predicate);
else
return true;
} private void Updated(object arg, bool isSuccess)
{
Expression<Func<T, bool>> predicate = arg as Expression<Func<T, bool>>;
if (AfterUpdate != null)
AfterUpdate(predicate, isSuccess);
} private bool Adding(object arg)
{
List<T> lst = arg as List<T>;
if (BeforeAdd != null)
return BeforeAdd(lst);
else
return true;
} private void Added(object arg, bool isSuccess)
{
List<T> lst = arg as List<T>;
if (AfterAdd != null)
AfterAdd(lst, isSuccess);
} private bool Deleting(object arg)
{
Expression<Func<T, bool>> predicate = arg as Expression<Func<T, bool>>;
if (BeforeDelete != null)
return BeforeDelete(predicate);
else
return true;
} private void Deleted(object arg, bool isSuccess)
{
Expression<Func<T, bool>> predicate = arg as Expression<Func<T, bool>>;
if (AfterDelete != null)
AfterDelete(predicate, isSuccess);
} private bool SaveOrUpdating(object arg, bool isAdd)
{
var entity = arg as T;
if (BeforeSaveOrUpdate != null)
return BeforeSaveOrUpdate(entity, isAdd);
else
return true;
} private void SaveOrUpdated(object arg, bool isAdd, bool isSuccess)
{
var entity = arg as T;
if (AfterSaveOrUpdate != null)
AfterSaveOrUpdate(entity, isAdd, isSuccess);
} private bool SaveOrUpdatingForList(object arg, bool isAdd)
{
List<T> lstEntity = arg as List<T>;
if (BeforeSaveOrUpdatingForList != null)
return BeforeSaveOrUpdatingForList(lstEntity, isAdd);
else
return false;
} private void SaveOrUpdatedForList(object arg, bool isAdd, bool isSuccess)
{
List<T> lstEntity = arg as List<T>;
if (AfterSaveOrUpdatingForList != null)
AfterSaveOrUpdatingForList(lstEntity, isAdd, isSuccess);
} private bool Commintting()
{
if (BeforeCommit != null)
return BeforeCommit();
else
return false;
} private void Committed(bool isSuccess)
{
if (AfterCommit != null)
AfterCommit(isSuccess);
} }
ViewEntityDependent类
public static class ViewEntityDependent
{
public static void RegisterEntityDependent()
{
JobView();
} private static void JobView()
{
List<string> jobRecord = new List<string>()
{
"JobResumeAutonomy","JobResumeAttention","JobResumeCompanyAuto","JobResumeCompanyPut"
};
CacheDependentEntitySet.RegisterDependentEntity("JobRecord", jobRecord);
} }
让EF支持sql语句的更多相关文章
- MVC EF 执行SQL语句(转载)
MVC EF 执行SQL语句 最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 闲着没事,看了一篇关于LI ...
- easyui datagrid 禁止选中行 EF的增删改查(转载) C# 获取用户IP地址(转载) MVC EF 执行SQL语句(转载) 在EF中执行SQL语句(转载) EF中使用SQL语句或存储过程 .net MVC使用Session验证用户登录 PowerDesigner 参照完整性约束(转载)
easyui datagrid 禁止选中行 没有找到可以直接禁止的属性,但是找到两个间接禁止的方式. 方式一: //onClickRow: function (rowIndex, rowData) ...
- MVC EF 执行SQL语句
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 闲着没事,看了一篇关于LINQ和SQL对比的文章,网友们 ...
- 如何用ORM支持SQL语句的CASE WHEN?
OQL如何支持CASE WHEN? 今天,一个朋友问我,OQL可否支持CASE WHEN语句?他给的示例SQL如下: then '启用' else '停用' from tb_User OQL是SOD框 ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(89)-EF执行SQL语句与存储过程
这一节,我们来看看EF如何执行SQL语句与读取存储过程的数据,可能有一部分人,还不知道EF如何执行存储过程与原生SQL语句! 我们什么时候要直接使用原生的SQL语句? 返回值过于复杂 过于复杂的联合查 ...
- 【Swift 4.0】扩展 WCDB 支持 SQL 语句
前言 入坑 wcdb 有两个月了,整体来说还是很不错的,具体优点可以参考文档说明,由于官方明确说明不支持 SQL 只好自己写一个扩展支持一下了
- EF执行SQL语句
使用上下文中的Database.SqlQuery<对应的表名>(sql语句) var data = dbcenter.Database.SqlQuery<CcBusiFormview ...
- EF使用sql语句
https://www.cnblogs.com/chenwolong/p/SqlQuery.html https://blog.csdn.net/zdhlwt2008/article/details/ ...
- ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪
ASP.NET MVC深入浅出(被替换) 一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...
随机推荐
- Hadoop4Win
Hadoop4Win + Eclipse 运行 WordCount 程序 http://software.intel.com/zh-cn/blogs/2013/10/16/hadoop4win-ecl ...
- 论山寨手机与Android联姻 【9】SmartPhone的硬件结构
如何区别智能手机(SmartPhone)与功能手机(FeaturePhone)? 有一种观点认为,智能手机本质上是功能手机与便携式电脑(Laptop PC)的结合.功能手机的功能受限于制造厂商的预制, ...
- Annotation 与 HttpClient(5)--Annotation HttpClient
Annotation HttpClient 本内容不保证正确性,如有问题请及时提出 经过前面四篇博客的铺垫,现在给出带有标记的HttpClient的实现. 1. 带标记的HttpClient的 ...
- libiconv_百度百科
libiconv_百度百科 由于历史原因,国际化的文字常常由于语言或者国家的原因使用不同的编码.目录 1libiconv历史简介 2libiconv编码简介 3libico ...
- mysql数据库学习(二)--表操作
一.表操作 以下内容都是自己学习的时候看过的一些知识,作为笔记记录一下吧,大部分都是所看文章的内容. 1.创建表 前面的基础篇笔记是相当于搭建了一个方便管理的文件夹树根,下面要学习的是一些关于表的知识 ...
- Android消息推送之GCM方式(二)
<声明> 转载请保留本来源地址: http://blog.csdn.net/wzg_1987/article/details/9148023 上一节讲了GCM方式实现前的一些必要准备工作, ...
- C结构体中位域
C结构体中位域的一点小知识,最近在看资料时遇到结构体中的一种特殊操作——位域,在下面的程序中我将根据自己的理解进行简单介绍.程序只是为了了解位域的一些性质,运行时有些编译器可能会报错. 程序代码如下( ...
- Quartz.NET 2.0 作业调度框架使用
Quartz.NET是一个开源的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活性而不 ...
- c++中,保证头文件只被编译一次,避免多重包含的方法
保证头文件只被编译一次 #pragma once这是一个比较常用的C/C++杂注,只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次. #pragma once是编译器相关的,有的编译器支 ...
- Algorithms 4th - 1.1 Basic Programming Model - EXERCISES
欢迎交流 1.1.1 a. 7 b. 200.0000002 c. true 1.1.2 a. 1.618 b. 10.0 c. true d. 33 1.1.3 public class MainA ...