在ABP项目中做执行SQL语句的实现时,遇到如下错误:
ERROR 2020-09-26 11:16:16,098 [7 ] oryRepositories.xxxRepository - SELECT * FROM xxx Error.
System.ArgumentNullException: 值不能为 null。
参数名: unitOfWork
在 Niue.Abp.Abp.EntityFramework.EntityFramework.Uow.UnitOfWorkExtensions.GetDbContext[TDbContext](IActiveUnitOfWork unitOfWork, Nullable1 multiTenancySide) 位置 C:\xxx\Abp.EntityFramework\EntityFramework\Uow\UnitOfWorkExtensions.cs:行号 33 在 Niue.Abp.Abp.EntityFramework.EntityFramework.Uow.UnitOfWorkDbContextProvider1.GetDbContext(Nullable1 multiTenancySide) 位置 C:\xxx\Abp.EntityFramework\EntityFramework\Uow\UnitOfWorkDbContextProvider.cs:行号 33 在 Niue.Abp.Abp.EntityFramework.EntityFramework.Uow.UnitOfWorkDbContextProvider1.GetDbContext() 位置 C:\xxx\Abp.EntityFramework\EntityFramework\Uow\UnitOfWorkDbContextProvider.cs:行号 28
在 Niue.EntityFramework.EntityFramework.Repositories.SqlRepositories.SqlRepository.get_Context() 位置 C:\xxx\EntityFramework\Repositories\SqlRepositories\SqlRepository.cs:行号 25
在 Niue.EntityFramework.EntityFramework.Repositories.SqlRepositories.SqlRepository.GetDbContext() 位置 C:\xxx\EntityFramework\Repositories\SqlRepositories\SqlRepository.cs:行号 29
在 Niue.EntityFramework.EntityFramework.Repositories.SqlRepositories.SqlRepository.ExecuteGenericsList[T](String sql) 位置 C:\xxx\EntityFramework\Repositories\SqlRepositories\SqlRepository.cs:行号 39
在 Niue.EntityFramework.EntityFramework.Repositories.xxxRepository.FindByOuterId(Int32 masterId, String outerId) 位置 C:\xxx\EntityFramework\Repositories\xxxRepository.cs:行号 156
解决方法:在方法前加上virtual就行了。
[UnitOfWork]
public virtual List<T> ExecuteGenericsList<T>(string sql) where T : class, new()
{
var db = _dbContextProvider.GetDbContext().Database;
var query = db.SqlQuery<T>(sql);
return query.ToList();
}
下面贴上SqlRepository代码。
public interface ISqlRepository<TDbContext> : ITransientDependency
{
/// <summary>
/// 执行命令
/// </summary>
/// <param name="sql">命令字符串</param>
/// <returns>执行命令后由数据库返回的结果</returns>
int Execute(string sql);
/// <summary>
/// 执行泛型列表查询
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql">命令字符串</param>
/// <returns>泛型列表</returns>
List<T> ExecuteGenericsList<T>(string sql) where T : class, new();
T ExecuteScalar<T>(string sql);
/// <summary>
/// 执行命令
/// </summary>
/// <param name="sql">命令字符串</param>
/// <returns>执行命令后由数据库返回的结果</returns>
Task<int> ExecuteAsync(string sql);
/// <summary>
/// 执行泛型列表查询
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql">命令字符串</param>
/// <returns>泛型列表</returns>
Task<List<T>> ExecuteGenericsListAsync<T>(string sql) where T : class, new();
Task<List<T>> ExecuteGenericsPageListAsync<T,

本文介绍在ABP框架中执行SQL语句时遇到的NullPointerException异常及其解决方法。通过在执行方法上添加virtual关键字,成功解决了问题。

795

被折叠的 条评论
为什么被折叠?



