EF6增改删等常用基类
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);
}
}
}
- 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;
- }
- //6.0
- /// <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);
- }
- }
- }
EF6增改删等常用基类的更多相关文章
- DataFrame查增改删
DataFrame查增改删 查 Read 类list/ndarray数据访问方式 dates = pd.date_range(',periods=10) dates df = pd.DataFrame ...
- XML简单的增改删操作
XML文件的简单增改删,每一个都可以单独拿出来使用. 新创建XML文件,<?xmlversion="1.0"encoding="utf-8"?> & ...
- js 属性增改删操作
js 属性增改删操作,可参看菜鸟教程,这里记录一个小问题:disabled属性 使用setAttribute操作无法 禁用disabled属性,需使用removeAttribute操作,原因是只要有d ...
- winform 窗体实现增删改查(CRUD)窗体基类模式
参考博客下方:http://www.cnblogs.com/wuhuacong/archive/2010/05/31/1748579.html 对于一般常用到的编辑数据.新增数据窗体,分开了两个不同的 ...
- 框架搭建与EF常用基类实现
前两篇简单谈了一些.Net Core的优势以及机构设计的一些思路,这一篇开始,我们将从零开始搭建架构,底层我们将采用EF来访问数据库,所以这篇我们将贴一下EF常用操作的基类. 简单介绍下一些类库将要实 ...
- python数据类型—列表(增改删查,统计,取值,排序)
列表是最常用的数据类型之一,通过列表可以对数据实现方便的存储,修改等操作. 先声明一个空列表: >>> names = [] >>> names [] 可以存多个值 ...
- oracle函数自治事务解决不能增改删的语句操作
CREATE OR REPLACE FUNCTION SEQ3 (v_bname in VARCHAR2) return NUMBER is pragma autonomous_transaction ...
- WPF中DataGrid的应用-绑定,增改删,分页,样式
参考以下网址: http://www.cnblogs.com/fwbnet/archive/2012/05/08/2490974.html
- Linq To Sql 增改删
using System; using System.Data.Linq.Mapping; namespace ConsoleApplication3 { [Table(Name = "te ...
随机推荐
- Fiddler抓包分析
在Fiddler的web session界面捕获到的HTTP请求如下图所示: 各字段的详细说明已经解释过,这里不再说明.需要注意的是#号列中的图标,每种图标代表不同的相应类型,具体的类型包括: ...
- CentOS7 安装PHP7的redis扩展:
phpredis-4.2.0.tar.gz:下载:wget https://github.com/phpredis/phpredis/archive/4.2.0.tar.gz $ tar -z ...
- Web测试要点
由于本人工作接触Web测试,所以我从网上找的资料,学习了解web测试哪些内容,然后自己整理汇总的随笔,如文章中有不足的地方,请大家多多指教:或者文章内容与他人相似,望见谅. web是什么?(转载: ...
- 【Java】【6】JDK8 Stream操作整理
摘要: 1,List<EntityOld>转换为List<EntityNew> List<EntityOld> list = oldList; List<En ...
- 使用maven命令把jar包加入maven仓库
命令:mvn install:install-file -Dfile=D:\jar包路径xxxx.jar -DgroupId=根目录文件夹名字 -DartifactId=子目录文件夹 -Dversi ...
- python-爬虫-selenium模块
一 介绍 selenium最初是一个自动化测试工具,而爬虫中使用它主要是为了解决requests无法直接执行JavaScript代码的问题 selenium本质是通过驱动浏览器,完全模拟浏览器的操作, ...
- python-flask-wtforms
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Oracle查询前几条数据的方法
在Oracle中实现select top N:由于Oracle不支持select top 语句,所以在Oracle中经常是用order by 跟rownum的组合来实现select top n的查询. ...
- SQL - 常用的特殊查询
sql 查询某字段不重复的全部记录: select * from table where fid in(Select min(fid) FROM table group by name) :
- vijos 清点人数
背景 NK中学组织同学们去五云山寨参加社会实践活动,按惯例要乘坐火车去.由于NK中学的学生很多,在火车开之前必须清点好人数. 描述 初始时,火车上没有学生:当同学们开始上火车时,年级主任从第一节车厢出 ...