Breeze 1.2.1未映射的属性;不能连载

Breeze 1.2.1未映射的属性;不能连载,breeze,Breeze,不确定是否是错误,但: 当您使用observable扩展类型时,它也会在saveChanges中序列化。这使得EFContextProvider在删除实体时失败 发送json的示例: {"entities": [{ "Id":1015, "Key":"3", "Value":"2", "undefined":"", "entityAspect":{ "entityTypeName":"Setting:#Settings_Beeze.Mode

不确定是否是错误,但: 当您使用observable扩展类型时,它也会在saveChanges中序列化。这使得EFContextProvider在删除实体时失败

发送json的示例:

{"entities": [{
    "Id":1015,
    "Key":"3",
    "Value":"2",
    "undefined":"",
    "entityAspect":{
        "entityTypeName":"Setting:#Settings_Beeze.Models",
        "entityState":"Deleted",
        "originalValuesMap":{"isBeingEdited":false},
        "autoGeneratedKey":{
             "propertyName":"Id",
             "autoGeneratedKeyType":"Identity"}}}],
"saveOptions":{
    "allowConcurrentSaves":false}}
isBeingEdited—客户端是可观察的,不应该发送到服务器(我认为是这样)。 它还生成未定义的字段(它不是扩展对象的一部分,它不知从何而来)

因此,服务器端代码在EFContextProvider中失败,出现NullReferenceException,以下是堆栈跟踪:

at Breeze.WebApi.EFContextProvider`1.SetPropertyValue(Object entity, String propertyName, Object value)
at Breeze.WebApi.EFContextProvider`1.<>c__DisplayClassd.<RestoreOriginal>b__c(KeyValuePair`2 kvp)
at System.Collections.Generic.List`1.ForEach(Action`1 action)
at Breeze.WebApi.EFContextProvider`1.RestoreOriginal(EntityInfo entityInfo)
at Breeze.WebApi.EFContextProvider`1.<ProcessAllDeleted>b__6(EFEntityInfo entityInfo)
at System.Collections.Generic.List`1.ForEach(Action`1 action)
at Breeze.WebApi.EFContextProvider`1.ProcessAllDeleted(List`1 deletedEntities)
at Breeze.WebApi.EFContextProvider`1.SaveChangesCore(Dictionary`2 saveMap)
at Breeze.WebApi.ContextProvider.SaveChanges(JObject saveBundle)
at Settings_Beeze.Controllers.DataController.SaveChanges(JObject saveBundle) in s:\Projects\Else\Settings Beeze\Settings Beeze\Controllers\DataController.cs:line 35
at lambda_method(Closure , Object , Object[] )
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.<>c__DisplayClass13.<GetExecutor>b__c(Object instance, Object[] methodParameters)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.Execute(Object instance, Object[] arguments)
at System.Web.Http.Controllers.ReflectedHttpActionDescriptor.<>c__DisplayClass5.<ExecuteAsync>b__4()
at System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func`1 func, CancellationToken cancellationToken)
位于Breeze.WebApi.EFContextProvider`1.SetPropertyValue(对象实体、字符串propertyName、对象值)
在Breeze.WebApi.EFContextProvider`1.c_uuudisplayClassd.b_uuuC(KeyValuePair`2 kvp)
at System.Collections.Generic.List`1.ForEach(操作`1操作)
位于Breeze.WebApi.EFContextProvider`1.RestoreOriginal(EntityInfo EntityInfo)
在Breeze.WebApi.EFContextProvider`1.b_uu_u6(EFEntityInfo entityInfo)
at System.Collections.Generic.List`1.ForEach(操作`1操作)
在Breeze.WebApi.EFContextProvider`1.ProcessAllDeleted(列表`1 deletedEntities)
位于Breeze.WebApi.EFContextProvider`1.SaveChangesCore(字典`2 saveMap)
在Breeze.WebApi.ContextProvider.SaveChanges(JObject saveBundle)上
在s:\Projects\Else\Settings-Beeze\Settings-Beeze\Controllers\DataController.SaveChanges(JObject-saveBundle)中的Settings\u-Beeze.Controllers.DataController.SaveChanges(JObject-saveBundle):第35行
在lambda_方法(闭包、对象、对象[])
在System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.c__DisplayClass13.b__c(对象实例,对象[]方法参数)
位于System.Web.Http.Controller.ReflectedHttpActionDescriptor.ActionExecutor.Execute(对象实例,对象[]参数)
在System.Web.Http.Controllers.ReflectedHttpActionDescriptor.c_uuDisplayClass5.b_uuu4()中
在System.Threading.Tasks.TaskHelpers.RunSynchronously[TResult](Func`1 Func,CancellationToken CancellationToken)
修正思路:unwrapOriginalValues应该检查属性是否未映射,并在不将其写入答案的情况下继续下一个属性

  • 将问题从GitHub移至SO

    • 对我来说听起来像个虫子。我们马上开始。

      请记住,堆栈溢出不是问题跟踪程序。Andrew,这个问题发布在Breeze GitHub网站上。我在这里重新发布了这个问题(以及可能的修复),因为我认为它对Breeze Stack Overflow社区有用。