MaY*_*YaN 0 c# sqlite ormlite-servicestack
我正在使用ServiceStack.Ormlite v3.9.71并拥有以下代码段,我在其中打开 Ormlite SQLite 事务,假设我想在代码中其他地方的命令中使用此事务:
var connFactory = new OrmLiteConnectionFactory("ConnectionString", SqliteOrmLiteDialectProvider.Instance)
using (IDbConnection db = connFactory.Open()) // using var doesn't make a difference
using (IDbTransaction tran = db.OpenTransaction()) // using var or even db.BeginTransaction() doesn't make a difference
{
// I do lots of boring stuff
...
// Somewhere else in the code
using (var cmd = db.CreateCommand())
{
cmd.Transaction = tran; // get an error
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,我得到:
A first chance exception of type 'System.InvalidCastException' occurred in System.Data.dll
Additional information: Unable to cast object of type 'ServiceStack.OrmLite.OrmLiteTransaction' to type 'System.Data.Common.DbTransaction'.
Run Code Online (Sandbox Code Playgroud)
和堆栈跟踪:
at System.Data.Common.DbCommand.System.Data.IDbCommand.set_Transaction(IDbTransaction value)
Run Code Online (Sandbox Code Playgroud)
我想这是由于 OrmLiteTransaction 包装器造成的,我如何才能进行交易?
小智 5
OrmLite 提供 ToDbTransaction 扩展方法。
public static IDbTransaction ToDbTransaction(this IDbTransaction dbTrans)
{
var hasDbTrans = dbTrans as IHasDbTransaction;
return hasDbTrans != null
? hasDbTrans.Transaction
: dbTrans;
}
Run Code Online (Sandbox Code Playgroud)
您可以像这样在代码中使用它。
cmd.Transaction = tran.ToDbTransaction()
Run Code Online (Sandbox Code Playgroud)
希望它能解决你的问题。
| 归档时间: |
|
| 查看次数: |
973 次 |
| 最近记录: |