我开发了一个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。
任何人都可以建议从哪里开始寻找这个问题?
更新:我现在已经在我的本地开发数据库上创建了一个视图,所以它现在应该与实时数据库相同。我期待这打破了本地开发的网站,但它有没有... :(
我认为这是一个关于实时数据库的视图,但开发数据库上的表? –