2016-05-19 73 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

相關問題