无法 GetActiveTransaction
Could not GetActiveTransaction
我需要在我的应用服务中调用存储过程。我正在按照此 tutorial 创建自定义存储库。但是我找不到Context.Database
。
代码如下:
[UnitOfWork]
public virtual async Task<List<string>> GetUserNames()
{
EnsureConnectionOpen();
using (var command = CreateCommand("GetUsernames", CommandType.storedProcedure))
{
using (var dataReader = await command.ExecuteReaderAsync())
{
var result = new List<string>();
while (dataReader.Read())
{
result.Add(dataReader["UserName"].ToString());
}
return result;
}
}
}
什么是 Context.Database
以及如何使用它?
我的申请是 MVC
.Net4.6.1
。
更新 1
我已经通过继承MyApplicationRepositoryBase
解决了这个问题。
现在我在尝试 GetActiveTransaction
时遇到了一个新问题。我对此一无所知。我能做什么?
代码如下:
private DbTransaction GetActiveTransaction()
{
return (DbTransaction)_transactionProvider.GetActiveTransaction(new ActiveTransactionProviderArgs
{
{"ContextType", typeof(MyDbContext) },
{"MultiTenancySide", MultiTenancySide }
});
}
这是错误日志:
System.NullReferenceException: Object reference not set to an instance of an object.
at Abp.EntityFramework.EfActiveTransactionProvider.GetActiveTransaction(ActiveTransactionProviderArgs args) in D:\Github\aspnetboilerplate\src\Abp.EntityFramework\EntityFramework\EfActiveTransactionProvider.cs:line 21
更新 2
我试图注释掉 command.Transaction
并且成功了:
private DbCommand CreateCommand(string commandText, CommandType commandType, params SqlParameter[] parameters)
{
var command = Context.Database.GetDbConnection().CreateCommand();
command.CommandText = commandText;
command.CommandType = commandType;
// command.Transaction = GetActiveTransaction();
foreach (var parameter in parameters)
{
command.Parameters.Add(parameter);
}
return command;
}
我仍然需要将我的代码放在事务下,所以我不想注释掉这一行。我该怎么办?
Now I faced the new issue when trying to get Active Transaction
在 YourProjectNameDataModule
的 PreInitialize
方法中添加:
Configuration.ReplaceService<IEfTransactionStrategy, DbContextEfTransactionStrategy>(DependencyLifeStyle.Transient);
我需要在我的应用服务中调用存储过程。我正在按照此 tutorial 创建自定义存储库。但是我找不到Context.Database
。
代码如下:
[UnitOfWork]
public virtual async Task<List<string>> GetUserNames()
{
EnsureConnectionOpen();
using (var command = CreateCommand("GetUsernames", CommandType.storedProcedure))
{
using (var dataReader = await command.ExecuteReaderAsync())
{
var result = new List<string>();
while (dataReader.Read())
{
result.Add(dataReader["UserName"].ToString());
}
return result;
}
}
}
什么是 Context.Database
以及如何使用它?
我的申请是 MVC
.Net4.6.1
。
更新 1
我已经通过继承MyApplicationRepositoryBase
解决了这个问题。
现在我在尝试 GetActiveTransaction
时遇到了一个新问题。我对此一无所知。我能做什么?
代码如下:
private DbTransaction GetActiveTransaction()
{
return (DbTransaction)_transactionProvider.GetActiveTransaction(new ActiveTransactionProviderArgs
{
{"ContextType", typeof(MyDbContext) },
{"MultiTenancySide", MultiTenancySide }
});
}
这是错误日志:
System.NullReferenceException: Object reference not set to an instance of an object. at Abp.EntityFramework.EfActiveTransactionProvider.GetActiveTransaction(ActiveTransactionProviderArgs args) in D:\Github\aspnetboilerplate\src\Abp.EntityFramework\EntityFramework\EfActiveTransactionProvider.cs:line 21
更新 2
我试图注释掉 command.Transaction
并且成功了:
private DbCommand CreateCommand(string commandText, CommandType commandType, params SqlParameter[] parameters)
{
var command = Context.Database.GetDbConnection().CreateCommand();
command.CommandText = commandText;
command.CommandType = commandType;
// command.Transaction = GetActiveTransaction();
foreach (var parameter in parameters)
{
command.Parameters.Add(parameter);
}
return command;
}
我仍然需要将我的代码放在事务下,所以我不想注释掉这一行。我该怎么办?
Now I faced the new issue when trying to get Active Transaction
在 YourProjectNameDataModule
的 PreInitialize
方法中添加:
Configuration.ReplaceService<IEfTransactionStrategy, DbContextEfTransactionStrategy>(DependencyLifeStyle.Transient);