EF RepositoryBase 参考示例【转】
1.定义泛型类
namespace Crm.Data.Logic.Repository
{
public abstract class AbstractRepository<TC, T> : IDisposable
where TC : DbContext, new()
where T : class
{
private TC _entities = new TC();
private bool _disposed;
protected TC Context
{
get
{
return _entities;
}
set
{
_entities = value;
}
}
public virtual IQueryable<T> All
{
get
{
return GetAll();
}
}
public virtual IQueryable<T> AllIncluding(params Expression<Func<T, object>>[] includeProperties)
{
IQueryable<T> queryable = _entities.Set<T>();
return includeProperties.Aggregate(queryable, (current, expression) => current.Include(expression));
}
public virtual IQueryable<T> GetAll()
{
return _entities.Set<T>();
}
public virtual T Find(params object[] keyValues)
{
return _entities.Set<T>().Find(keyValues);
}
public virtual IQueryable<T> FindBy(Expression<Func<T, bool>> predicate)
{
return _entities.Set<T>().Where(predicate);
}
public virtual void Add(T entity)
{
_entities.Set<T>().Add(entity);
}
public virtual void BulkInsert(List<T> list)
{
var tblName = typeof(T).Name;
BulkInsert(_entities.Database.Connection.ConnectionString, tblName, list);
}
public static void BulkInsert(string connection, string tableName, IList<T> list)
{
using (var bulkCopy = new SqlBulkCopy(connection))
{
bulkCopy.BatchSize = list.Count;
bulkCopy.DestinationTableName = tableName;
var table = new DataTable();
var props = TypeDescriptor.GetProperties(typeof(T))
//Dirty hack to make sure we only have system data types
//i.e. filter out the relationships/collections
.Cast<PropertyDescriptor>()
.Where(propertyInfo => propertyInfo.PropertyType.Namespace != null
&& propertyInfo.PropertyType.Namespace.Equals("System"))
.ToArray();
foreach (var propertyInfo in props)
{
bulkCopy.ColumnMappings.Add(propertyInfo.Name, propertyInfo.Name);
table.Columns.Add(propertyInfo.Name, Nullable.GetUnderlyingType(propertyInfo.PropertyType) ?? propertyInfo.PropertyType);
}
var values = new object[props.Length];
foreach (var item in list)
{
for (var i = 0; i < values.Length; i++)
{
values[i] = props[i].GetValue(item);
}
table.Rows.Add(values);
}
bulkCopy.WriteToServer(table);
}
}
public virtual void Delete(T entity)
{
_entities.Set<T>().Remove(entity);
}
public virtual void Edit(T entity)
{
_entities.Entry(entity).State = (EntityState.Modified);
}
public virtual void Upsert(T entity, Func<T, bool> insertExpression)
{
if (insertExpression(entity))
{
Add(entity);
}
else
{
Edit(entity);
}
}
public virtual void Save()
{
_entities.SaveChanges();
}
public virtual DataTable PageQuery(int page, int pageSize,
string sort, string where, out int total)
{
var viewName = typeof (T).Name;
var paras = new List<SqlParameter>
{
new SqlParameter("tblName", "dbo."+viewName),
new SqlParameter("fldName", "*"),
new SqlParameter("pageSize", pageSize),
new SqlParameter("page", page),
new SqlParameter("fldSort", sort),
new SqlParameter("strCondition", where),
new SqlParameter("pageCount", SqlDbType.Int){Direction = ParameterDirection.Output},
};
var countParameter = new SqlParameter
{
ParameterName = "counts",
SqlDbType = SqlDbType.Int,
Direction = ParameterDirection.Output
};
var strParameter = new SqlParameter("strSql", SqlDbType.NVarChar, 4000) { Direction = ParameterDirection.Output };
paras.Add(countParameter);
paras.Add(strParameter);
var conn = _entities.Database.Connection.ConnectionString;
var ds = SqlHelper.ExecuteDataset(conn, CommandType.StoredProcedure,
"dbo.PagedQuery", paras.ToArray());
total = countParameter.Value == DBNull.Value ? 0 : Convert.ToInt32(countParameter.Value);
return ds.Tables[0];
}
public virtual List<T> PageQueryList(int page, int pageSize,
string sort, string where, out int total)
{
var viewName = typeof(T).Name;
var paras = new List<SqlParameter>
{
new SqlParameter("tblName", "dbo."+viewName),
new SqlParameter("fldName", "*"),
new SqlParameter("pageSize", pageSize),
new SqlParameter("page", page),
new SqlParameter("fldSort", sort),
new SqlParameter("strCondition", where),
new SqlParameter("pageCount", SqlDbType.Int){Direction = ParameterDirection.Output},
};
var countParameter = new SqlParameter
{
ParameterName = "counts",
SqlDbType = SqlDbType.Int,
Direction = ParameterDirection.Output
};
var strParameter = new SqlParameter("strSql", SqlDbType.NVarChar, 4000) { Direction = ParameterDirection.Output };
paras.Add(countParameter);
paras.Add(strParameter);
//var conn = _entities.Database.Connection.ConnectionString;
//var ds = SqlHelper.ExecuteDataset(conn, CommandType.StoredProcedure,
// "dbo.PagedQuery", paras.ToArray());
//total = countParameter.Value == DBNull.Value ? 0 : Convert.ToInt32(countParameter.Value);
var ret =_entities.Database.SqlQuery<T>(
"dbo.PagedQuery @tblName,@fldName,@pageSize,@page,@fldSort,@strCondition,@pageCount out,@counts out,@strSql out",
paras.ToArray()).ToList();
total = countParameter.Value == DBNull.Value ? 0 : Convert.ToInt32(countParameter.Value);
return ret;
}
protected virtual void Dispose(bool disposing)
{
if (!_disposed && disposing)
{
_entities.Dispose();
}
_disposed = true;
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
}
2. 具体类继承泛型类
namespace Crm.Data.Logic.Logic
{
public class CrmDispatchLogic:AbstractRepository<LifeEntities,Crm_Dispatch>
{
}
}
3. 使用具体类
var dispatchSvc = new CrmDispatchLogic();
var dispatchModel = dispatchSvc.GetAll().FirstOrDefault(m => m.Handler == opId
&& m.IsUse == 1);
if (dispatchModel != null)
{}
转载于:https://www.cnblogs.com/jimcsharp/p/5916961.html
EF RepositoryBase 参考示例【转】相关推荐
- python登录跳转_Python模拟登录和登录跳转的参考示例
# coding:utf-8 import urllib import urllib2 import cookielib from bs4 import BeautifulSoup # 设置登录url ...
- Net EF框架+ MySql示例
1.nuget中添加包EF和MySql.Data.Entity 2.config文件添加如下配置 1.配置entitframework节点(一般安装EF时自动添加) <entityFramewo ...
- ps -ef grep java解释,ps -ef | grep java(示例代码)
ps命令将某个进程显示出来 grep命令是查找 中间的|是管道命令 是指ps命令与grep同时执行 PS是LINUX下最常用的也是非常强大的进程查看命令 grep命令是查找,是一种强大的文本搜索工具, ...
- (Entity Framework) EF框架简单示例用法
EF框架是微软推出的用于与数据库交互的组件,这里简单列出一些常用用法,代码来源于<EF6-DBFirst-Demo>. 向数据库增加.修改.删除一条新记录的写法 using (var co ...
- API接口实战演练,参考示例说明
onebound.1688.item_get 公共参数 名称 类型 必须 描述 key String 是 调用key(必须以GET方式拼接在URL中) 注册Key和secret测试 secret St ...
- python实现登陆注册跳转_Python模拟登录和登录跳转的参考示例
# coding:utf-8 import urllib import urllib2 import cookielib from bs4 import beautifulsoup # 设置登录url ...
- 云上网络规划CIDR地址划分的参考示例
CIDR规则 0000 0000. //预留 0000 0000. //region Id 区域,例如北京.上海 000 //vpc Id 区域内部不同子网,例如北京1机房.2机房0 0000. // ...
- java 方法 示例_Java方法参考类型和示例
java 方法 示例 Java Method Reference was introduced in Java 8, along with lambda expressions. The method ...
- python软件代码示例-python 示例代码1
第一章 python基础一 在此不再赘述为什么学习python这门编程,网上搜索一箩筐.我在此仅说一句python的好,用了你就会爱上它. 本python示例代码1000+带你由浅入深的了解pyth ...
最新文章
- (转)MySQL 线程池内幕
- ML之相似度计算:图像数据、字符串数据等计算相似度常用的十种方法简介、代码实现
- IOS选中按钮状态的记录
- c语言编程三问三答,c语言程序编程
- Delphi中的基础数据类型
- 5_Text Generation(文本生成)
- 微软TechEd 2006亲历(一):交流的价值
- switch的对象不能为null
- suse linux 使用教程,suse linux 命令教程
- 计算机网络(第七版)谢希仁知识点总结
- 商业楼与写字楼的区别详解
- 人工智能AI伪原创一键生成文章
- java 权限 部分截图
- 第二章:软件项目确立
- (转贴)汉字转拼音缩写
- 快速学习-处理响应数据
- EventTarget.addEventListener()事件监听
- 什么是电商API接口?那如何调取呢?
- 【开发】后端框架——SpringBoot
- 基于php鲜花花卉销售商城网站(源码+系统+mysql数据库+Lw文档)
热门文章
- 查看openfrie是否连接mysql_openfire连接mysql数据库的字符集问题解决
- beego mysql session_Go语言之高级篇beego框架之cookie与session
- cmd 修改ie快捷方式_windows使用技巧之Win + R 与 CMD 的不同
- python 读取配置文件的单元测试_单元测试
- matlab 中最小二乘拟合,matlab 最小二乘拟合
- 验证input输入框(字母,数字,符号,中文)
- a标签以post方式提交
- php整形数组求里面的质数,PHP实现的分解质因数操作示例
- oss上传判断_OSS
- android 饿了么地图,饿了么送餐位置地图定位代码