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. Vue.js示例:GitHub提交(watch数据,created钩子,filters过滤); 网格组件(功能:1.检索,2排序);

    GitHub提交 codePen:   https://codepen.io/chentianwei411/pen/wEVPZo 注意:频繁看案例,可能会被限制. 重点: 表单输入绑定, 单选按钮的使 ...

  2. 3月22 关于CSS

    CSS(Cascading Style Sheep 叠层样式表,作用是美化HTML网页)/*注释内容*/ 为注释的方法. 样式表的分类: 1.内联样式表 和HTML联合显示,控制精确,但是可重用性差, ...

  3. flask-前台布局页面搭建3

    4.前台布局的搭建 由于前端知识有限,我在网上下载的人家的前台源码,附上链接 https://link.jianshu.com/?t=https://github.com/mtianyan/movie ...

  4. 深入Spring Boot: 怎样排查 java.lang.ArrayStoreException

    java.lang.ArrayStoreException 分析 这个demo来说明怎样排查一个spring boot 1应用升级到spring boot 2时可能出现的java.lang.Array ...

  5. spring cloud服务发现注解之@EnableDiscoveryClient与@EnableEurekaClient

    使用服务发现的时候提到了两种注解,一种为@EnableDiscoveryClient,一种为@EnableEurekaClient,用法上基本一致,今天就来讲下两者,下文是从stackoverflow ...

  6. Physical Limits of ASM

    Oracle version 7, only 1,022 datafiles per database could be used.  Oracle version 11g, support 65,5 ...

  7. Node.js是用来干嘛的

    如果你去年注意过技术方面的新闻,我敢说你至少看到node.js不下一两次.那么问题来了“node.js是什么?”.有些人没准会告诉你“这是一种通过JavaScript语言开发web服务端的东西”.如果 ...

  8. 逆袭之旅DAY17.东软实训.Oracle.存储过程

    2018-07-13 09:08:36

  9. 1-4Controller之Middleware

    1.注册中间件: 新建中间件文件:Activity <?php namespace App\Http\Middleware; use Closure; class Activity{ publi ...

  10. Win10系列:VC++ Direct3D模板介绍2

    (3)CreateDeviceResources函数 CreateDeviceResources函数默认添加在CubeRenderer.cpp源文件中,此函数用于创建着色器和立体图形顶点.接下来分别介 ...