using System;
using System.Linq;
using System.Threading.Tasks;
using System.Linq.Expressions;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using FantasyCMS.IDAL; namespace FantasyCMS.DAL
{
public class BaseRepository<TEntity> : InterfaceBaseRepository<TEntity> where TEntity : class
{
protected DBContext nContext = ContextFactory.GetCurentContext(); public virtual IQueryable<TEntity> FindList<S>(Expression<Func<TEntity, bool>> whereLambda, Expression<Func<TEntity, S>> orderLambda, bool isAsc)
{
var _list = nContext.Set<TEntity>().Where<TEntity>(whereLambda);
if (isAsc) _list = _list.OrderBy<TEntity, S>(orderLambda);
else _list = _list.OrderByDescending<TEntity, S>(orderLambda);
return _list;
} public virtual IQueryable<TEntity> FindPageList<S>(Expression<Func<TEntity, bool>> whereLambda, Expression<Func<TEntity, S>> orderLambda, bool isAsc, int page, int pageSize)
{
var _list = nContext.Set<TEntity>().Where<TEntity>(whereLambda);
if (isAsc) _list = _list.OrderBy<TEntity, S>(orderLambda);
else _list = _list.OrderByDescending<TEntity, S>(orderLambda);
_list = _list.Skip(pageSize * (page - 1)).Take(pageSize);
return _list;
} /// <summary>
/// 创建一个原始 SQL 查询,该查询将返回此集中的实体。 默认情况下,上下文会跟踪返回的实体;可通过对返回的 DbSqlQuery<TEntity> 调用 AsNoTracking 来更改此设置。 请注意返回实体的类型始终是此集的类型,而不会是派生的类型。 如果查询的一个或多个表可能包含其他实体类型的数据,则必须编写适当的 SQL 查询以确保只返回适当类型的实体。 与接受 SQL 的任何 API 一样,对任何用户输入进行参数化以便避免 SQL 注入攻击是十分重要的。 您可以在 SQL 查询字符串中包含参数占位符,然后将参数值作为附加参数提供。 您提供的任何参数值都将自动转换为 DbParameter。 context.Blogs.SqlQuery("SELECT * FROM dbo.Posts WHERE Author = @p0", userSuppliedAuthor); 或者,您还可以构造一个 DbParameter 并将它提供给 SqlQuery。 这允许您在 SQL 查询字符串中使用命名参数。 context.Blogs.SqlQuery("SELECT * FROM dbo.Posts WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));
/// </summary>
/// <param name="sql">sql查询语句</param>
public virtual IEnumerable<TEntity> SqlQuery(string sql)
{
return nContext.Database.SqlQuery<TEntity>(sql);
} /// <summary>
/// 对数据库执行给定的 DDL/DML 命令。 与接受 SQL 的任何 API 一样,对任何用户输入进行参数化以便避免 SQL 注入攻击是十分重要的。 您可以在 SQL 查询字符串中包含参数占位符,然后将参数值作为附加参数提供。 您提供的任何参数值都将自动转换为 DbParameter。 context.Database.ExecuteSqlCommand("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @p0", userSuppliedAuthor); 或者,您还可以构造一个 DbParameter 并将它提供给 SqlQuery。 这允许您在 SQL 查询字符串中使用命名参数。 context.Database.ExecuteSqlCommand("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));
/// </summary>
/// <param name="sql">查询语句</param>
/// <returns></returns>
public virtual bool ExecuteSqlCommand(string sql)
{
return nContext.Database.ExecuteSqlCommand(sql) > 0;
} /// <summary>
/// 异步对数据库执行给定的 DDL/DML 命令。 与接受 SQL 的任何 API 一样,对任何用户输入进行参数化以便避免 SQL 注入攻击是十分重要的。 您可以在 SQL 查询字符串中包含参数占位符,然后将参数值作为附加参数提供。 您提供的任何参数值都将自动转换为 DbParameter。 context.Database.ExecuteSqlCommand("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @p0", userSuppliedAuthor); 或者,您还可以构造一个 DbParameter 并将它提供给 SqlQuery。 这允许您在 SQL 查询字符串中使用命名参数。 context.Database.ExecuteSqlCommand("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));
/// </summary>
/// <param name="sql">查询语句</param>
/// <returns></returns>
public virtual async Task<bool> ExcuteSqlCommandAsync(string sql)
{
return await nContext.Database.ExecuteSqlCommandAsync(sql) > 0;
} /// <summary>
/// 将给定实体以“已添加”状态添加到集的基础上下文中,这样一来,当调用 SaveChanges 时,会将该实体插入到数据库中。
/// </summary>
/// <param name="entity">实体</param>
/// <returns></returns>
public virtual bool Add(TEntity entity)
{
nContext.Set<TEntity>().Add(entity);
return nContext.SaveChanges() > 0;
} /// <summary>
/// 异步将给定实体以“已添加”状态添加到集的基础上下文中,这样一来,当调用 SaveChanges 时,会将该实体插入到数据库中。
/// </summary>
/// <param name="entity">实体</param>
/// <returns></returns>
public virtual async Task<bool> AddAsync(TEntity entity)
{
nContext.Set<TEntity>().Add(entity);
return await nContext.SaveChangesAsync() > 0;
} /// <summary>
/// 将给定实体集合添加到基础化集的上下文中(每个实体都置于“已添加”状态),这样当调用 SaveChanges 时,会将它插入到数据库中。
/// </summary>
/// <param name="entities">合集</param>
/// <returns></returns>
public virtual bool AddRange(IEnumerable<TEntity> entities)
{
nContext.Set<TEntity>().AddRange(entities);
return nContext.SaveChanges() > 0;
} /// <summary>
/// 异步将给定实体集合添加到基础化集的上下文中(每个实体都置于“已添加”状态),这样当调用 SaveChanges 时,会将它插入到数据库中。
/// </summary>
/// <param name="entities">合集</param>
/// <returns></returns>
public virtual async Task<bool> AddRangeAsync(IEnumerable<TEntity> entities)
{
nContext.Set<TEntity>().AddRange(entities);
return await nContext.SaveChangesAsync() > 0;
} /// <summary>
/// 将给定实体标记为“已删除”,这样一来,当调用 SaveChanges 时,将从数据库中删除该实体。 请注意,在调用此方法之前,该实体必须以另一种状态存在于该上下文中。
/// </summary>
/// <param name="entity">实体</param>
/// <returns></returns>
public virtual bool Remove(TEntity entity)
{
nContext.Set<TEntity>().Remove(entity);
return nContext.SaveChanges() > 0;
} /// <summary>
/// 异步将给定实体标记为“已删除”,这样一来,当调用 SaveChanges 时,将从数据库中删除该实体。 请注意,在调用此方法之前,该实体必须以另一种状态存在于该上下文中。
/// </summary>
/// <param name="entity">实体</param>
/// <returns></returns>
public virtual async Task<bool> RemoveAsync(TEntity entity)
{
nContext.Set<TEntity>().Remove(entity);
return await nContext.SaveChangesAsync() > 0;
} /// <summary>
/// 从基础化集的上下文中删除给定实体集合(每个实体都置于“已删除”状态),这样当调用 SaveChanges 时,会从数据库中删除它。
/// </summary>
/// <param name="entities">合集</param>
/// <returns></returns>
public virtual bool RemoveRange(IEnumerable<TEntity> entities)
{
nContext.Set<TEntity>().RemoveRange(entities);
return nContext.SaveChanges() > 0;
} /// <summary>
/// 异步从基础化集的上下文中删除给定实体集合(每个实体都置于“已删除”状态),这样当调用 SaveChanges 时,会从数据库中删除它。
/// </summary>
/// <param name="entities">合集</param>
/// <returns></returns>
public virtual async Task<bool> RemoveRangeAsync(IEnumerable<TEntity> entities)
{
nContext.Set<TEntity>().RemoveRange(entities);
return await nContext.SaveChangesAsync() > 0;
} /// <summary>
/// 重载。 调用 SaveChanges 时,按键添加或更新实体。 等效于数据库术语中的“upsert”操作。 此方法在使用迁移设置数据的种子时很有用。 (由 DbSetMigrationsExtensions 定义。)
/// </summary>
/// <param name="entity">实体</param>
/// <returns></returns>
public virtual bool AddOrUpdate(TEntity entity)
{
nContext.Set<TEntity>().AddOrUpdate(entity);
return nContext.SaveChanges() > 0;
} /// <summary>
/// 重载。 异步调用 SaveChanges 时,按键添加或更新实体。 等效于数据库术语中的“upsert”操作。 此方法在使用迁移设置数据的种子时很有用。 (由 DbSetMigrationsExtensions 定义。)
/// </summary>
/// <param name="entity">实体</param>
/// <returns></returns>
public virtual async Task<bool> AddOrUpdateAsync(TEntity entity)
{
nContext.Set<TEntity>().AddOrUpdate(entity);
return await nContext.SaveChangesAsync() > 0;
} /// <summary>
/// 重载。 确定序列的任何元素是否满足条件。 (由 QueryableExtensions 定义。)
/// </summary>
/// <param name="anyLambda"></param>
/// <returns></returns>
public virtual bool Exists(Expression<Func<TEntity, bool>> anyLambda)
{
return nContext.Set<TEntity>().Any(anyLambda);
} /// <summary>
/// 重载。 异步确定序列的任何元素是否满足条件。 (由 QueryableExtensions 定义。)
/// </summary>
/// <param name="anyLambda"></param>
/// <returns></returns>
public virtual async Task<bool> ExistsAsync(Expression<Func<TEntity, Boolean>> anyLambda)
{
return await nContext.Set<TEntity>().AnyAsync(anyLambda);
} /// <summary>
/// 查找带给定主键值的实体。 如果上下文中存在带给定主键值的实体,则立即返回该实体,而不会向存储区发送请求。 否则,会向存储区发送查找带给定主键值的实体的请求,如果找到该实体,则将其附加到上下文并返回。 如果未在上下文或存储区中找到实体,则返回 null。
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public virtual TEntity Find(object key)
{
return nContext.Set<TEntity>().Find(key);
} /// <summary>
/// 异步查找带给定主键值的实体。 如果上下文中存在带给定主键值的实体,则立即返回该实体,而不会向存储区发送请求。 否则,会向存储区发送查找带给定主键值的实体的请求,如果找到该实体,则将其附加到上下文并返回。 如果未在上下文或存储区中找到实体,则返回 null。
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public virtual async Task<TEntity> FindAsync(object key)
{
return await nContext.Set<TEntity>().FindAsync(key);
} /// <summary>
/// 重载。 异步返回序列的第一个元素。
/// </summary>
/// <param name="whereLambda">查询表达式</param>
/// <returns></returns>
public virtual TEntity Find(Expression<Func<TEntity, bool>> whereLambda)
{
return nContext.Set<TEntity>().FirstOrDefault<TEntity>(whereLambda);
} /// <summary>
/// 重载。 异步返回序列的第一个元素。
/// </summary>
/// <param name="whereLambda">查询表达式</param>
/// <returns></returns>
public virtual async Task<TEntity> FindAsync(Expression<Func<TEntity, bool>> whereLambda)
{
return await nContext.Set<TEntity>().FirstOrDefaultAsync<TEntity>(whereLambda);
} /// <summary>
/// 重载。 异步枚举查询结果并对每个元素执行指定的操作。 (由 QueryableExtensions 定义。)
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public virtual async Task ForeachAsync(Action<TEntity> obj)
{
await nContext.Set<TEntity>().ForEachAsync(obj);
} /// <summary>
/// 重载。 返回序列中的元素数。 (由 QueryableExtensions 定义。)
/// </summary>
/// <returns></returns>
public virtual int Count()
{
return nContext.Set<TEntity>().Count();
} /// <summary>
/// 重载。 异步返回序列中的元素数。 (由 QueryableExtensions 定义。)
/// </summary>
/// <returns></returns>
public virtual async Task<int> CountAsync()
{
return await nContext.Set<TEntity>().CountAsync();
} /// <summary>
/// 重载。 返回满足条件的序列中的元素数。
/// </summary>
/// <param name="predicate">查询表达式</param>
/// <returns></returns>
public virtual int Count(Expression<Func<TEntity, bool>> predicate)
{
return nContext.Set<TEntity>().Count(predicate);
} /// <summary>
/// 重载。 返回满足条件的序列中的元素数。
/// </summary>
/// <param name="predicate">查询表达式</param>
/// <returns></returns>
public virtual async Task<int> CountAsync(Expression<Func<TEntity, bool>> predicate)
{
return await nContext.Set<TEntity>().CountAsync(predicate);
}
}
}

  

  1. using System;
  2. using System.Linq;
  3. using System.Threading.Tasks;
  4. using System.Linq.Expressions;
  5. using System.Collections.Generic;
  6. using System.Data.Entity;
  7. using System.Data.Entity.Migrations;
  8. using FantasyCMS.IDAL;
  9. namespace FantasyCMS.DAL
  10. {
  11. public class BaseRepository<TEntity> : InterfaceBaseRepository<TEntity> where TEntity : class
  12. {
  13. protected DBContext nContext = ContextFactory.GetCurentContext();
  14. public virtual IQueryable<TEntity> FindList<S>(Expression<Func<TEntity, bool>> whereLambda, Expression<Func<TEntity, S>> orderLambda, bool isAsc)
  15. {
  16. var _list = nContext.Set<TEntity>().Where<TEntity>(whereLambda);
  17. if (isAsc) _list = _list.OrderBy<TEntity, S>(orderLambda);
  18. else _list = _list.OrderByDescending<TEntity, S>(orderLambda);
  19. return _list;
  20. }
  21. public virtual IQueryable<TEntity> FindPageList<S>(Expression<Func<TEntity, bool>> whereLambda, Expression<Func<TEntity, S>> orderLambda, bool isAsc, int page, int pageSize)
  22. {
  23. var _list = nContext.Set<TEntity>().Where<TEntity>(whereLambda);
  24. if (isAsc) _list = _list.OrderBy<TEntity, S>(orderLambda);
  25. else _list = _list.OrderByDescending<TEntity, S>(orderLambda);
  26. _list = _list.Skip(pageSize * (page - 1)).Take(pageSize);
  27. return _list;
  28. }
  29. //6.0
  30. /// <summary>
  31. /// 创建一个原始 SQL 查询,该查询将返回此集中的实体。 默认情况下,上下文会跟踪返回的实体;可通过对返回的 DbSqlQuery<TEntity> 调用 AsNoTracking 来更改此设置。 请注意返回实体的类型始终是此集的类型,而不会是派生的类型。 如果查询的一个或多个表可能包含其他实体类型的数据,则必须编写适当的 SQL 查询以确保只返回适当类型的实体。 与接受 SQL 的任何 API 一样,对任何用户输入进行参数化以便避免 SQL 注入攻击是十分重要的。 您可以在 SQL 查询字符串中包含参数占位符,然后将参数值作为附加参数提供。 您提供的任何参数值都将自动转换为 DbParameter。 context.Blogs.SqlQuery("SELECT * FROM dbo.Posts WHERE Author = @p0", userSuppliedAuthor); 或者,您还可以构造一个 DbParameter 并将它提供给 SqlQuery。 这允许您在 SQL 查询字符串中使用命名参数。 context.Blogs.SqlQuery("SELECT * FROM dbo.Posts WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));
  32. /// </summary>
  33. /// <param name="sql">sql查询语句</param>
  34. public virtual IEnumerable<TEntity> SqlQuery(string sql)
  35. {
  36. return nContext.Database.SqlQuery<TEntity>(sql);
  37. }
  38. /// <summary>
  39. /// 对数据库执行给定的 DDL/DML 命令。 与接受 SQL 的任何 API 一样,对任何用户输入进行参数化以便避免 SQL 注入攻击是十分重要的。 您可以在 SQL 查询字符串中包含参数占位符,然后将参数值作为附加参数提供。 您提供的任何参数值都将自动转换为 DbParameter。 context.Database.ExecuteSqlCommand("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @p0", userSuppliedAuthor); 或者,您还可以构造一个 DbParameter 并将它提供给 SqlQuery。 这允许您在 SQL 查询字符串中使用命名参数。 context.Database.ExecuteSqlCommand("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));
  40. /// </summary>
  41. /// <param name="sql">查询语句</param>
  42. /// <returns></returns>
  43. public virtual bool ExecuteSqlCommand(string sql)
  44. {
  45. return nContext.Database.ExecuteSqlCommand(sql) > 0;
  46. }
  47. /// <summary>
  48. /// 异步对数据库执行给定的 DDL/DML 命令。 与接受 SQL 的任何 API 一样,对任何用户输入进行参数化以便避免 SQL 注入攻击是十分重要的。 您可以在 SQL 查询字符串中包含参数占位符,然后将参数值作为附加参数提供。 您提供的任何参数值都将自动转换为 DbParameter。 context.Database.ExecuteSqlCommand("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @p0", userSuppliedAuthor); 或者,您还可以构造一个 DbParameter 并将它提供给 SqlQuery。 这允许您在 SQL 查询字符串中使用命名参数。 context.Database.ExecuteSqlCommand("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @author", new SqlParameter("@author", userSuppliedAuthor));
  49. /// </summary>
  50. /// <param name="sql">查询语句</param>
  51. /// <returns></returns>
  52. public virtual async Task<bool> ExcuteSqlCommandAsync(string sql)
  53. {
  54. return await nContext.Database.ExecuteSqlCommandAsync(sql) > 0;
  55. }
  56. /// <summary>
  57. /// 将给定实体以“已添加”状态添加到集的基础上下文中,这样一来,当调用 SaveChanges 时,会将该实体插入到数据库中。
  58. /// </summary>
  59. /// <param name="entity">实体</param>
  60. /// <returns></returns>
  61. public virtual bool Add(TEntity entity)
  62. {
  63. nContext.Set<TEntity>().Add(entity);
  64. return nContext.SaveChanges() > 0;
  65. }
  66. /// <summary>
  67. /// 异步将给定实体以“已添加”状态添加到集的基础上下文中,这样一来,当调用 SaveChanges 时,会将该实体插入到数据库中。
  68. /// </summary>
  69. /// <param name="entity">实体</param>
  70. /// <returns></returns>
  71. public virtual async Task<bool> AddAsync(TEntity entity)
  72. {
  73. nContext.Set<TEntity>().Add(entity);
  74. return await nContext.SaveChangesAsync() > 0;
  75. }
  76. /// <summary>
  77. /// 将给定实体集合添加到基础化集的上下文中(每个实体都置于“已添加”状态),这样当调用 SaveChanges 时,会将它插入到数据库中。
  78. /// </summary>
  79. /// <param name="entities">合集</param>
  80. /// <returns></returns>
  81. public virtual bool AddRange(IEnumerable<TEntity> entities)
  82. {
  83. nContext.Set<TEntity>().AddRange(entities);
  84. return nContext.SaveChanges() > 0;
  85. }
  86. /// <summary>
  87. /// 异步将给定实体集合添加到基础化集的上下文中(每个实体都置于“已添加”状态),这样当调用 SaveChanges 时,会将它插入到数据库中。
  88. /// </summary>
  89. /// <param name="entities">合集</param>
  90. /// <returns></returns>
  91. public virtual async Task<bool> AddRangeAsync(IEnumerable<TEntity> entities)
  92. {
  93. nContext.Set<TEntity>().AddRange(entities);
  94. return await nContext.SaveChangesAsync() > 0;
  95. }
  96. /// <summary>
  97. /// 将给定实体标记为“已删除”,这样一来,当调用 SaveChanges 时,将从数据库中删除该实体。 请注意,在调用此方法之前,该实体必须以另一种状态存在于该上下文中。
  98. /// </summary>
  99. /// <param name="entity">实体</param>
  100. /// <returns></returns>
  101. public virtual bool Remove(TEntity entity)
  102. {
  103. nContext.Set<TEntity>().Remove(entity);
  104. return nContext.SaveChanges() > 0;
  105. }
  106. /// <summary>
  107. /// 异步将给定实体标记为“已删除”,这样一来,当调用 SaveChanges 时,将从数据库中删除该实体。 请注意,在调用此方法之前,该实体必须以另一种状态存在于该上下文中。
  108. /// </summary>
  109. /// <param name="entity">实体</param>
  110. /// <returns></returns>
  111. public virtual async Task<bool> RemoveAsync(TEntity entity)
  112. {
  113. nContext.Set<TEntity>().Remove(entity);
  114. return await nContext.SaveChangesAsync() > 0;
  115. }
  116. /// <summary>
  117. /// 从基础化集的上下文中删除给定实体集合(每个实体都置于“已删除”状态),这样当调用 SaveChanges 时,会从数据库中删除它。
  118. /// </summary>
  119. /// <param name="entities">合集</param>
  120. /// <returns></returns>
  121. public virtual bool RemoveRange(IEnumerable<TEntity> entities)
  122. {
  123. nContext.Set<TEntity>().RemoveRange(entities);
  124. return nContext.SaveChanges() > 0;
  125. }
  126. /// <summary>
  127. /// 异步从基础化集的上下文中删除给定实体集合(每个实体都置于“已删除”状态),这样当调用 SaveChanges 时,会从数据库中删除它。
  128. /// </summary>
  129. /// <param name="entities">合集</param>
  130. /// <returns></returns>
  131. public virtual async Task<bool> RemoveRangeAsync(IEnumerable<TEntity> entities)
  132. {
  133. nContext.Set<TEntity>().RemoveRange(entities);
  134. return await nContext.SaveChangesAsync() > 0;
  135. }
  136. /// <summary>
  137. /// 重载。 调用 SaveChanges 时,按键添加或更新实体。 等效于数据库术语中的“upsert”操作。 此方法在使用迁移设置数据的种子时很有用。 (由 DbSetMigrationsExtensions 定义。)
  138. /// </summary>
  139. /// <param name="entity">实体</param>
  140. /// <returns></returns>
  141. public virtual bool AddOrUpdate(TEntity entity)
  142. {
  143. nContext.Set<TEntity>().AddOrUpdate(entity);
  144. return nContext.SaveChanges() > 0;
  145. }
  146. /// <summary>
  147. /// 重载。 异步调用 SaveChanges 时,按键添加或更新实体。 等效于数据库术语中的“upsert”操作。 此方法在使用迁移设置数据的种子时很有用。 (由 DbSetMigrationsExtensions 定义。)
  148. /// </summary>
  149. /// <param name="entity">实体</param>
  150. /// <returns></returns>
  151. public virtual async Task<bool> AddOrUpdateAsync(TEntity entity)
  152. {
  153. nContext.Set<TEntity>().AddOrUpdate(entity);
  154. return await nContext.SaveChangesAsync() > 0;
  155. }
  156. /// <summary>
  157. /// 重载。 确定序列的任何元素是否满足条件。 (由 QueryableExtensions 定义。)
  158. /// </summary>
  159. /// <param name="anyLambda"></param>
  160. /// <returns></returns>
  161. public virtual bool Exists(Expression<Func<TEntity, bool>> anyLambda)
  162. {
  163. return nContext.Set<TEntity>().Any(anyLambda);
  164. }
  165. /// <summary>
  166. /// 重载。 异步确定序列的任何元素是否满足条件。 (由 QueryableExtensions 定义。)
  167. /// </summary>
  168. /// <param name="anyLambda"></param>
  169. /// <returns></returns>
  170. public virtual async Task<bool> ExistsAsync(Expression<Func<TEntity, Boolean>> anyLambda)
  171. {
  172. return await nContext.Set<TEntity>().AnyAsync(anyLambda);
  173. }
  174. /// <summary>
  175. /// 查找带给定主键值的实体。 如果上下文中存在带给定主键值的实体,则立即返回该实体,而不会向存储区发送请求。 否则,会向存储区发送查找带给定主键值的实体的请求,如果找到该实体,则将其附加到上下文并返回。 如果未在上下文或存储区中找到实体,则返回 null。
  176. /// </summary>
  177. /// <param name="key"></param>
  178. /// <returns></returns>
  179. public virtual TEntity Find(object key)
  180. {
  181. return nContext.Set<TEntity>().Find(key);
  182. }
  183. /// <summary>
  184. /// 异步查找带给定主键值的实体。 如果上下文中存在带给定主键值的实体,则立即返回该实体,而不会向存储区发送请求。 否则,会向存储区发送查找带给定主键值的实体的请求,如果找到该实体,则将其附加到上下文并返回。 如果未在上下文或存储区中找到实体,则返回 null。
  185. /// </summary>
  186. /// <param name="key"></param>
  187. /// <returns></returns>
  188. public virtual async Task<TEntity> FindAsync(object key)
  189. {
  190. return await nContext.Set<TEntity>().FindAsync(key);
  191. }
  192. /// <summary>
  193. /// 重载。 异步返回序列的第一个元素。
  194. /// </summary>
  195. /// <param name="whereLambda">查询表达式</param>
  196. /// <returns></returns>
  197. public virtual TEntity Find(Expression<Func<TEntity, bool>> whereLambda)
  198. {
  199. return nContext.Set<TEntity>().FirstOrDefault<TEntity>(whereLambda);
  200. }
  201. /// <summary>
  202. /// 重载。 异步返回序列的第一个元素。
  203. /// </summary>
  204. /// <param name="whereLambda">查询表达式</param>
  205. /// <returns></returns>
  206. public virtual async Task<TEntity> FindAsync(Expression<Func<TEntity, bool>> whereLambda)
  207. {
  208. return await nContext.Set<TEntity>().FirstOrDefaultAsync<TEntity>(whereLambda);
  209. }
  210. /// <summary>
  211. /// 重载。 异步枚举查询结果并对每个元素执行指定的操作。 (由 QueryableExtensions 定义。)
  212. /// </summary>
  213. /// <param name="obj"></param>
  214. /// <returns></returns>
  215. public virtual async Task ForeachAsync(Action<TEntity> obj)
  216. {
  217. await nContext.Set<TEntity>().ForEachAsync(obj);
  218. }
  219. /// <summary>
  220. /// 重载。 返回序列中的元素数。 (由 QueryableExtensions 定义。)
  221. /// </summary>
  222. /// <returns></returns>
  223. public virtual int Count()
  224. {
  225. return nContext.Set<TEntity>().Count();
  226. }
  227. /// <summary>
  228. /// 重载。 异步返回序列中的元素数。 (由 QueryableExtensions 定义。)
  229. /// </summary>
  230. /// <returns></returns>
  231. public virtual async Task<int> CountAsync()
  232. {
  233. return await nContext.Set<TEntity>().CountAsync();
  234. }
  235. /// <summary>
  236. /// 重载。 返回满足条件的序列中的元素数。
  237. /// </summary>
  238. /// <param name="predicate">查询表达式</param>
  239. /// <returns></returns>
  240. public virtual int Count(Expression<Func<TEntity, bool>> predicate)
  241. {
  242. return nContext.Set<TEntity>().Count(predicate);
  243. }
  244. /// <summary>
  245. /// 重载。 返回满足条件的序列中的元素数。
  246. /// </summary>
  247. /// <param name="predicate">查询表达式</param>
  248. /// <returns></returns>
  249. public virtual async Task<int> CountAsync(Expression<Func<TEntity, bool>> predicate)
  250. {
  251. return await nContext.Set<TEntity>().CountAsync(predicate);
  252. }
  253. }
  254. }

EF6增改删等常用基类的更多相关文章

  1. DataFrame查增改删

    DataFrame查增改删 查 Read 类list/ndarray数据访问方式 dates = pd.date_range(',periods=10) dates df = pd.DataFrame ...

  2. XML简单的增改删操作

    XML文件的简单增改删,每一个都可以单独拿出来使用. 新创建XML文件,<?xmlversion="1.0"encoding="utf-8"?> & ...

  3. js 属性增改删操作

    js 属性增改删操作,可参看菜鸟教程,这里记录一个小问题:disabled属性 使用setAttribute操作无法 禁用disabled属性,需使用removeAttribute操作,原因是只要有d ...

  4. winform 窗体实现增删改查(CRUD)窗体基类模式

    参考博客下方:http://www.cnblogs.com/wuhuacong/archive/2010/05/31/1748579.html 对于一般常用到的编辑数据.新增数据窗体,分开了两个不同的 ...

  5. 框架搭建与EF常用基类实现

    前两篇简单谈了一些.Net Core的优势以及机构设计的一些思路,这一篇开始,我们将从零开始搭建架构,底层我们将采用EF来访问数据库,所以这篇我们将贴一下EF常用操作的基类. 简单介绍下一些类库将要实 ...

  6. python数据类型—列表(增改删查,统计,取值,排序)

    列表是最常用的数据类型之一,通过列表可以对数据实现方便的存储,修改等操作. 先声明一个空列表: >>> names = [] >>> names [] 可以存多个值 ...

  7. oracle函数自治事务解决不能增改删的语句操作

    CREATE OR REPLACE FUNCTION SEQ3 (v_bname in VARCHAR2) return NUMBER is pragma autonomous_transaction ...

  8. WPF中DataGrid的应用-绑定,增改删,分页,样式

    参考以下网址: http://www.cnblogs.com/fwbnet/archive/2012/05/08/2490974.html

  9. Linq To Sql 增改删

    using System; using System.Data.Linq.Mapping; namespace ConsoleApplication3 { [Table(Name = "te ...

随机推荐

  1. Fiddler抓包分析

    在Fiddler的web session界面捕获到的HTTP请求如下图所示:   各字段的详细说明已经解释过,这里不再说明.需要注意的是#号列中的图标,每种图标代表不同的相应类型,具体的类型包括:   ...

  2. CentOS7 安装PHP7的redis扩展:

      phpredis-4.2.0.tar.gz:下载:wget https://github.com/phpredis/phpredis/archive/4.2.0.tar.gz   $ tar -z ...

  3. Web测试要点

    由于本人工作接触Web测试,所以我从网上找的资料,学习了解web测试哪些内容,然后自己整理汇总的随笔,如文章中有不足的地方,请大家多多指教:或者文章内容与他人相似,望见谅.   web是什么?(转载: ...

  4. 【Java】【6】JDK8 Stream操作整理

    摘要: 1,List<EntityOld>转换为List<EntityNew> List<EntityOld> list = oldList; List<En ...

  5. 使用maven命令把jar包加入maven仓库

    命令:mvn install:install-file -Dfile=D:\jar包路径xxxx.jar -DgroupId=根目录文件夹名字  -DartifactId=子目录文件夹 -Dversi ...

  6. python-爬虫-selenium模块

    一 介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作, ...

  7. python-flask-wtforms

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Oracle查询前几条数据的方法

    在Oracle中实现select top N:由于Oracle不支持select top 语句,所以在Oracle中经常是用order by 跟rownum的组合来实现select top n的查询. ...

  9. SQL - 常用的特殊查询

    sql 查询某字段不重复的全部记录: select * from table where fid in(Select min(fid) FROM table group by name) :

  10. vijos 清点人数

    背景 NK中学组织同学们去五云山寨参加社会实践活动,按惯例要乘坐火车去.由于NK中学的学生很多,在火车开之前必须清点好人数. 描述 初始时,火车上没有学生:当同学们开始上火车时,年级主任从第一节车厢出 ...