Nicolas I
Nicolas I

Reputation: 234

Unable to cast object of type 'ServiceStack.OrmLite.OrmLiteDataParameter' to type 'Oracle.DataAccess.Client.OracleParameter'

I am using this code

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();
                });

After updating to servicestack.ormlite.oracle 4.0.52 (from 4.0.38) I receive the following error:

System.InvalidCastException was unhandled by user code HResult=-2147467262 Message=Unable to cast object of type 'ServiceStack.OrmLite.OrmLiteDataParameter' to type 'Oracle.DataAccess.Client.OracleParameter'. Source=Oracle.DataAccess StackTrace: at Oracle.DataAccess.Client.OracleParameterCollection.Add(Object obj) at ServiceStack.OrmLite.DbDataParameterExtensions.AddParam(IOrmLiteDialectProvider dialectProvider, IDbCommand dbCmd, Object value, Type fieldType) at ServiceStack.OrmLite.Oracle.OracleOrmLiteDialectProvider.PrepareUpdateRowStatement(IDbCommand dbCmd, Object objWithProperties, ICollection1 updateFields) at ServiceStack.OrmLite.WriteExpressionCommandExtensions.UpdateOnlySql[T](IDbCommand dbCmd, T model, SqlExpression1 onlyFields) at ServiceStack.OrmLite.WriteExpressionCommandExtensions.UpdateOnly[T](IDbCommand dbCmd, T model, SqlExpression1 onlyFields) at ServiceStack.OrmLite.OrmLiteWriteExpressionsApi.<>c__DisplayClass72.b__6(IDbCommand dbCmd) at ServiceStack.OrmLite.OrmLiteExecFilter.Exec[T](IDbConnection dbConn, Func`2 filter) at ECMAPI.Repository.Security.SecurityRepository.<>c__DisplayClassfb.b__f9(IDbConnection dbCnx) in SecurityRepository.cs:line 1970

Any clues?

Upvotes: 0

Views: 196

Answers (1)

mythz
mythz

Reputation: 143339

To use Transaction Support in OrmLite you should use OpenTransaction() also the Run() extension method doesn't provide any value so I'd rewrite your example to just:

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();
}

Upvotes: 1

Related Questions