2014-01-14 25 views
1

在MS LocalDB或SQL2012中執行OrmLiteWriteConnectionExtensions.CreateTable()時,這會轉換爲TIME(7) db列類型。其結果是將使用OrmLiteWriteConnectionExtensions.SaveAll()我們得到以下錯誤數據時:ServiceStack OrmLite「無法將參數值從時間跨度轉換爲DateTime時間列的類型」

Unhandled Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.InvalidCastException: Failed to convert parameter value from a TimeSpan to a DateTime. ---> System.InvalidCastException: Object must implement IConvertible. 
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider) 
at System.Data.SqlClient.SqlParameter.CoerceValue(Object value, MetaType destinationType, Boolean& coercedToDataFeed, Boolean& typeChanged, Boolean allowStreaming) 
--- End of inner exception stack trace --- 
at System.Data.SqlClient.SqlParameter.CoerceValue(Object value, MetaType destinationType, Boolean& coercedToDataFeed, Boolean& typeChanged, Boolean allowStreaming) 
at System.Data.SqlClient.SqlParameter.GetCoercedValue() 
at System.Data.SqlClient.SqlParameter.Validate(Int32 index, Boolean isCommandProc) 
at System.Data.SqlClient.SqlCommand.BuildParamList(TdsParser parser, SqlParameterCollection parameters) 
at System.Data.SqlClient.SqlCommand.BuildExecuteSql(CommandBehavior behavior, String commandText, SqlParameterCollection parameters, _SqlRPC& rpc) 
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite) 
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) 
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) 
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() 
at ServiceStack.OrmLite.OrmLiteResultsFilterExtensions.ExecNonQuery(IDbCommand dbCmd) 
at ServiceStack.OrmLite.OrmLiteWriteExtensions.Insert[T](IDbCommand dbCmd, T obj, Boolean selectIdentity) 
at ServiceStack.OrmLite.OrmLiteWriteExtensions.SaveAll[T](IDbCommand dbCmd, IEnumerable`1 objs) 
at ServiceStack.OrmLite.OrmLiteWriteConnectionExtensions.<>c__DisplayClass5d`1.<SaveAll>b__5c(IDbCommand dbCmd) 
at ServiceStack.OrmLite.ReadConnectionExtensions.Exec[T](IDbConnection dbConn, Func`2 filter) 
at ServiceStack.OrmLite.OrmLiteWriteConnectionExtensions.SaveAll[T](IDbConnection dbConn, IEnumerable`1 objs) 
--- End of inner exception stack trace --- 
at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) 
at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) 
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 

雖然我很欣賞我們能解決這一輪我本來期望OrmLite到時間跨度映射爲OrmLite方言的一部分,甚至是存儲爲蜱?我不確定應該採用IConvertible來解決這個問題。

注意:我們有意在我們的數據模型中使用TimeSpan C#類型來表示僅表示時間而非日期的字段,以便明確地使用。

回答

相關問題