0

在我们的后备数据库中,我们有一个类型为 varbinary(max) 的数据字段。使用 Breeze,我们可以在该字段中保存数据,但是,当我们想将其回调时,我们会遇到错误。在我们生成的模型中,该字段被映射到一个字节[]。但是,当 Breeze 尝试将其序列化为字符串时,它会引发错误。

$id: "1",
$type: "System.Web.Http.HttpError, System.Web.Http",
Message: "An error has occurred.",
ExceptionMessage: "The specified cast from a materialized 'System.String' type to the 'System.Byte[]' type is not valid.",
ExceptionType: "System.InvalidOperationException",
StackTrace: " at System.Data.Common.Internal.Materialization.Shaper.ErrorHandlingValueReader`1.GetValue(DbDataReader reader, Int32 ordinal) at System.Data.Common.Internal.Materialization.Shaper.GetColumnValueWithErrorHandling[TColumn](Int32 ordinal) at lambda_method(Closure , Shaper ) at System.Data.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper) at System.Data.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext() at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) at Breeze.WebApi.ODataActionFilter.OnActionExecuted(HttpActionExecutedContext actionExecutedContext) at System.Web.Http.Filters.ActionFilterAttribute.CallOnActionExecuted(HttpActionContext actionContext, HttpResponseMessage response, Exception exception) at System.Web.Http.Filters.ActionFilterAttribute.<>c__DisplayClass2.<System.Web.Http.Filters.IActionFilter.ExecuteActionFilterAsync>b__0(HttpResponseMessage response) at System.Threading.Tasks.TaskHelpersExtensions.<>c__DisplayClass41`2.<Then>b__40(Task`1 t) at System.Threading.Tasks.TaskHelpersExtensions.ThenImpl[TTask,TOuterResult](TTask task, Func`2 continuation, CancellationToken cancellationToken, Boolean runSynchronously)"

任何帮助都会很棒!

4

1 回答 1

0

我一直无法重现这一点。

Breeze 能够获取服务器端 byte[] 并将其转换为客户端上的字符串。每当返回 Employee 实体时,您都可以在微风的“DocCode”示例中看到一个示例。Employee 类型有一个 Photo 属性,该属性的服务器端数据类型为“byte[]”,它作为“字符串”返回给微风客户端。

我认为您遇到的是服务器端物化问题,您试图将数据库上的二进制 blob 物化为字符串属性。如果您的模型属性键入为“字符串”而不是“字节 []”,则会发生这种情况。

希望这可以帮助。

于 2013-01-23T01:03:12.710 回答