2016-05-19 40 views
0

我使用这个代码无法投射型“ServiceStack.OrmLite.OrmLiteDataParameter”的目的为类型“Oracle.DataAccess.Client.OracleParameter”

using (var db = OpenDbConnection()) 
      if (db != null) 
       db.Run(dbCnx => 
       { 
        var trans = dbCnx.BeginTransaction(); 

         dbCnx.UpdateOnly(new ProtectiveMarkingRequest 
         { 
          SecondApproverUserName = request.SecondApproverUserName, 
          Status = request.Status 
         }, 
          onlyFields: p => new 
          { 
           p.SecondApproverUserName, 
           p.Status 
          }, 
          @where: p => p.WorkItemCode == request.WorkItemCode); 
        } 

        trans.Commit(); 
       }); 

更新到servicestack.ormlite.oracle 4.0.52后(从4.0.38),收到以下错误:

System.InvalidCastException是由用户代码 的HResult = -2147467262 消息=无法转换类型“ServiceStack.OrmLite.OrmLiteDataParameter”的目的为类型“的Oracle未处理。 DataAccess.Client.OracleParameter”。 源= Oracle.DataAccess 堆栈跟踪: 在Oracle.DataAccess.Client.OracleParameterCollection.Add(对象OBJ) 在ServiceStack.OrmLite.DbDataParameterExtensions.AddParam(IOrmLiteDialectProvider dialectProvider,IDbCommand的dbCmd,对象的值,类型字段类型) 在ServiceStack。 OrmLite.Oracle.OracleOrmLiteDialectProvider.PrepareUpdateRowStatement(IDbCommand的dbCmd,对象objWithProperties,ICollection的1 updateFields) at ServiceStack.OrmLite.WriteExpressionCommandExtensions.UpdateOnlySql[T](IDbCommand dbCmd, T model, SqlExpression 1 onlyFields) 在ServiceStack.OrmLite.WriteExpressionCommandExtensions.UpdateOnly [T](IDbCommand的dbCmd,T模型,SqlExpression 1 onlyFields) at ServiceStack.OrmLite.OrmLiteWriteExpressionsApi.<>c__DisplayClass7 2.b__6(IDbCommand的dbCmd) 在ServiceStack .OrmLite.OrmLiteExecFilter.Exec [T](IDbConnection dbConn,Func`2 filter) at ECMAPI.Repository.Security.SecurityRepo sitory。 <> SecurityRepository.cs中的c__DisplayClassfb.b__f9(IDbConnection dbCnx):line 1970

任何线索?

+0

的API在OrmLite打开一个交易OpenTransaction() ,我也会删除dB.Run() – mythz

+0

@mythz你能给我举个例子吗? –

+0

我已经添加了一个重写示例的答案。 – mythz

回答

1

要使用Transaction Support in OrmLite你应该使用OpenTransaction()Run()扩展方法不提供任何值,所以我会重写你的例子只是:

using (var db = OpenDbConnection()) 
using (var trans = db.OpenTransaction()) 
{ 
    db.UpdateOnly(new ProtectiveMarkingRequest 
     { 
      SecondApproverUserName = request.SecondApproverUserName, 
      Status = request.Status 
     }, 
     onlyFields: p => new { 
      p.SecondApproverUserName, 
      p.Status 
     }, 
     @where: p => p.WorkItemCode == request.WorkItemCode); 
    } 
    trans.Commit(); 
} 
+0

我测试过这个并产生相同的错误。 –

+0

@NicolasI看起来像这样[问题已在v4.0.54中解决](https://github.com/ServiceStack/ServiceStack.OrmLite/commit/285b3b95359f4c170e344e0471429b7f1677ceb8) - 请升级到v4.0.54或最好是最新的v4.0.56。 – mythz

相关问题