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 ...
随机推荐
- 网站访问出现 ------ Can not write to cache files, please check directory ./cache/ .
最近在搞微商城时,突然出现了Can not write to cache files, please check directory ./cache/ .这样一个提示, 但最近好像没搞什么大动作,怎么 ...
- Binomial Coefficient(二项式系数)
In mathematics, any of the positive integers that occurs as a coefficient in the binomial theorem is ...
- 4.1.3 Euclid's Game (POJ 2348)
Problem description: 以辗转相除法为基础,给定两个整数a和b,Stan和Ollie轮流从较大的数字中减去较小数字的倍数(整倍数),并且相减后的结果不能为零.Stan先手,在自己的回 ...
- UI基础一:简单的BOL查询
利用标准的BOL编辑工具,添加BOL对象,重写查询方法,实现简答的BOL查询 1.SE11创建查询对象结构: 2.SE11创建查询结果对象: 3.SE24新建处理类: 重写查询结果方法: METHOD ...
- webapp检测安卓app是否安装并launch
1. cordova插件 1)查看所有已安装的安卓app https://www.npmjs.com/package/cordova-plugin-packagemanager A simple pl ...
- QString 的用法
C++语言提供了两种字符串的实现:C风格的字符串,以'\0‘结尾;std::string,即标准模版库中的类.Qt则提供了自己的字符串实现:QString,QString不用担心内存分配以及关于'\0 ...
- 把旧系统迁移到.Net Core 2.0 日记 (12) --发布遇到的问题
1. 开发时是在Mac+MySql, 尝试发布时是在SQL2005+Win 2008 (第一版) 在Startup.cs里,数据库连接要改,分页时netcore默认是用offset关键字分页, 如果用 ...
- Java获取路径(getResource)
package com.zhi.test; public class PathTest { public static void main(String[] args) { System.out.pr ...
- 在vue项目中使用sass
如果想开发移动端项目,那么适配的时候sass必不可缺,但是 npm 安装sass时候总是报错失败! 研究半天发现可以解决的方法,亲测有效 1.先换成淘宝镜像再安装 npm install -g cn ...
- Oracle中使用PL/SQL如何定义参数、参数赋值、输出参数和 if 判断
1.pl/sql如何定义参数 declare --1)定义参数 -- ban_Id number; ban_Name ); 2.pl/sql如何参数赋值 --2)参数赋值-- ban_Id :; ba ...