我開發了一個ServiceStack API,使用基於SQL Server的ORMLite。該應用完美地指向我的本地SQL數據庫和Azure數據庫。快樂的時光!將工作ServiceStack遷移到活動原因無法將'System.Byte'類型的對象轉換爲鍵入'System.String'
我現在已經嘗試將此解決方案移至活動服務器,該服務器擁有相同數據庫的本地副本,並且獲得了奇怪的結果。錯誤是:
Error Code: InvalidCastException
Message: Unable to cast object of type 'System.Byte' to type 'System.String'.
[EMEM: 1/16/2014 11:49:29 AM]: [REQUEST: {Equipment:DP112}]
System.InvalidCastException: Unable to cast object of type 'System.Byte' to type 'System.String'. at lambda_method(Closure , Object , Object) at
ServiceStack.OrmLite.OrmLiteDialectProviderBase`1.SetDbValue(FieldDefinition fieldDef, IDataReader dataReader, Int32 colIndex, Object instance) at
ServiceStack.OrmLite.ReadExtensions.ExprConvertToList[T](IDataReader dataReader) at ServiceStack.OrmLite.OrmLiteResultsFilterExtensions.ExprConvertToList[T](IDbCommand dbCmd, String sql) at
ServiceStack.OrmLite.ReadConnectionExtensions.Exec[T](IDbConnection dbConn, Func`2 filter) at
ViewPoint.EquipmentService.Get(EMEM request) at
ServiceStack.Host.ServiceRunner`1.Execute(IRequest request, Object instance, TRequest requestDto)
我檢查了數據庫模式,他們看起來完全相同。
這是對3個數據庫中的2個非常高興但不是第3個的代碼。
public object Get(EMEM request)
{
var dbFactory = new OrmLiteConnectionFactory(WebConfigurationManager.ConnectionStrings["db"].ToString(), SqlServerDialect.Provider);
using (IDbConnection db = dbFactory.OpenDbConnection())
{
if (request.Equipment == null)
{
List<EMEM> results = db.Select<EMEM>();
return results;
}
else
{
List<EMEM> results = db.Select<EMEM>(p => p.Where(ev => ev.Equipment == request.Equipment));
return results;
}
}
}
我可以從字面上通過這往往表明它的數據庫相關的Azure數據庫指向連接字符串解決問題
額外信息(?):
- 我也寫了一put方法更新數據庫中的一行並且工作正常。
- 在2臺服務器上,EMEM是一張桌子,但在第三臺服務器上,它不起作用,它是一個View。
任何人都可以建議從哪裏開始尋找這個問題?
更新:我現在已經在我的本地開發數據庫上創建了一個視圖,所以它現在應該與實時數據庫相同。我期待這打破了本地開發的網站,但它有沒有... :(
我認爲這是一個關於實時數據庫的視圖,但開發數據庫上的表? –