dotnetcore / osharp

OSharp是一个基于.Net6.0的快速开发框架,框架对 AspNetCore 的配置、依赖注入、日志、缓存、实体框架、Mvc(WebApi)、身份认证、功能权限、数据权限等模块进行更高一级的自动化封装,并规范了一套业务实现的代码结构与操作流程,使 .Net 框架更易于应用到实际项目开发中。
Apache License 2.0
2.79k stars 752 forks source link

更新问题 #162

Closed 240011814 closed 4 years ago

240011814 commented 4 years ago

这个怎样实现不查询,直接更新,我记得ef core是有个attch方法,现在找不到了,还有就是如果要调用sql语句,这个用哪个方法

gmf520 commented 4 years ago

Repository 中有 UpdateBetch方法,是通过EF.Plus实现的,可以用于不查询直接更新的批量更新

/// <summary>
/// 批量更新所有符合特定条件的实体
/// </summary>
/// <param name="predicate">查询条件的谓语表达式</param>
/// <param name="updateExpression">属性更新表达式</param>
/// <returns>操作影响的行数</returns>
int UpdateBatch(Expression<Func<TEntity, bool>> predicate, Expression<Func<TEntity, TEntity>> updateExpression);
240011814 commented 4 years ago

我怎样才能取到ef core的那个dbcontext?

gmf520 commented 4 years ago

我怎样才能取到ef core的那个dbcontext?

DbContext 在O#中的默认实现是DefaultDbContext,你可以有几种方式获取到这个对象

  1. 如果你的项目只使用O#默认的DefaultDbContext,可以直接在构造函数注入 DefaultDbContext,在一个Scoped范围内获取的都是同一个对象
  2. 如果存在自定义上下文,需要区分实体类属于哪个上下文,注入IUnitOfWorkManager,通过manager.GetDbContext<TEntity, TKey>() 传入指定实体类获取所属上下文