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. python3-----多进程、多线程、多协程

    目前计算机程序一般会遇到两类I/O:硬盘I/O和网络I/O.我就针对网络I/O的场景分析下python3下进程.线程.协程效率的对比.进程采用multiprocessing.Pool进程池,线程是自己 ...

  2. JS中循环逻辑和判断逻辑的使用实例

    源代码见: https://github.com/Embrace830/JSExample &&和||的理解 a || b:如果a是true,那么b不管是true还是false,都返回 ...

  3. 【洛谷p5015】标题统计

    (写上瘾了再来一篇吧) 标题统计[传送门] 洛谷算法标签 字符串这种东西,我看到是崩溃的.因为我们只学到了二维数组[这个梗自行get],总之我们当时还没有学.然后显然就是各种翻书,各种百度.大致了解了 ...

  4. Arthur and Brackets CodeForces - 508E (贪心,括号匹配)

    大意: n个括号, 位置未知, 给出每对括号左右间距, 求输出一个合法括号序列. 最后一个括号间距一定为1, 从右往左遍历, 每次括号划分越小越好. #include <iostream> ...

  5. 『计算机视觉』Mask-RCNN_推断网络其六:Mask生成

    一.Mask生成概览 上一节的末尾,我们已经获取了待检测图片的分类回归信息,我们将回归信息(即待检测目标的边框信息)单独提取出来,结合金字塔特征mrcnn_feature_maps,进行Mask生成工 ...

  6. 【PowerDesigner】【5】数据模型 CDM

    前言:各种箭头的含义其实我还是有点混乱,所以这里只做记录 参考博客: 1,Powerdesigner数据库建模--概念模型--ER图[转] - holycrap - 博客园https://www.cn ...

  7. blog项目知识点梳理

    1.获取图片验证码: def get_validCode_img(request): # 方式1: # import os # path= os.path.join(settings.BASE_DIR ...

  8. InnoDB存储引擎介绍-(7) Innodb数据页结构

    数据页结构 File Header 总共38 Bytes,记录页的头信息 名称 大小(Bytes) 描述 FIL_PAGE_SPACE 4 该页的checksum值 FIL_PAGE_OFFSET 4 ...

  9. 【转】C# string数组转int数组

    //字符串数组(源数组) string[] sNums = new[] {"1", "2"}; //整型数组(目标数组) int[] iNums; //转换方法 ...

  10. 【转】Vue-详解设置路由导航的两种方法: <router-link :to="..."> 和router.push(...)

    一.<router-link :to="..."> to里的值可以是一个字符串路径,或者一个描述地址的对象.例如: // 字符串 <router-link to= ...