Breeze.js:在没有反向 rel 的情况下将元素添加到导航属性集合会引发异常 [无法获取属性“名称”的值]

2024-03-03

我的 EDM 中有两个实体,Application and Address几乎类似于以下内容:

class Application
{
    ICollection<Address> Addresses { get; set; }
}

class Address { }

在客户端上,我创建每个实例并尝试添加address实例到Application.addresses收藏:

var address = addressType.createEntity(...);
var application = applicationType.createEntity(...);

application.addresses.push(address);

不幸的是,我收到运行时异常:“Unable to get value of the property 'name': object is null or undefined".

我跟踪异常回到checkForDups函数于breeze.debug.js@9393-9404(v1.2.8):

function checkForDups(relationArray, adds) {
    // don't allow dups in this array. - also prevents recursion 
    var inverseProp = relationArray.navigationProperty.inverse;
    var goodAdds = adds.filter(function(a) {
        if (relationArray._addsInProcess.indexOf(a) >= 0) {
            return false;
        }
        var inverseValue = a.getProperty(inverseProp.name);
        return inverseValue != relationArray.parentEntity;
    });
    return goodAdds;
}

碰巧,我的实体处于一对多的单向关系(没有反向导航属性);结果在运行时relationArray.navigationProperty.inverse is undefined所以尝试访问时出现错误name财产。

添加一个简单的检查可以解决问题,并允许添加到集合中:

if (!inverseProp) {
    return true;
}

所以,归根结底,问题是:这是一个错误还是只是 Breeze 不支持一对多单向?


Edit从现已发布的 v Breeze 1.3.5(2013 年 6 月 4 日)开始,此问题已得到修复。


Edit:好吧,这是一个错误,但我无法修复当前版本。我会尝试在接下来的版本中得到它。

您建议的修复是个好主意,实际上只是隐藏了问题。

真正的问题是,对于我们在 1->n 方向(即不在 n->1 方向)进行单向导航的情况,breeze 没有足够的元数据。因此,导航集合中的重复实体检查将不起作用,并且子级与父级的自动连接也将丢失。

在我们解决问题之前,最简单的解决方法就是简单地使其成为双向导航。请注意,另一个方向的单向导航效果很好。


这可能是一个错误

我们的 DocCode 示例项目中有一个关于 OrderDetails 和 Products 之间单向导航的示例。但在这种情况下,我们允许从 OrderDetail -> Product (1-1) 导航,但不允许从 Product -> OrderDetails (1-n) 导航。

您的情况似乎相反,即允许 1-n 但不允许相应的 1-1。我将创建一些测试,如果我可以重现这个问题,它将在下一个版本中修复。

当这种情况发生时,我会发回这里。 (感谢您找到它:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Breeze.js:在没有反向 rel 的情况下将元素添加到导航属性集合会引发异常 [无法获取属性“名称”的值] 的相关文章

  • 如何检测实体 EntityState 的更改?

    我想在客户列表的每一行上放置一个 删除 按钮和一个 取消 按钮 当客户 未更改 时 取消 按钮将被禁用 但是 当客户转换到更改状态 已添加 已修改 已删除 时 我想启用 取消 按钮 以便用户可以在保存之前撤消更改 无论它们是什么 我几乎可以
  • 保护服务器上的 Breeze 以防止恶意更新外键

    问题 我只是想弄清楚在 Breeze 中保存更改时我需要在服务器端实现多少安全性 特别是 我正在考虑恶意用户如何手动破解 SaveChanges 请求 或破解客户端中的 javascript 以绕过我的正常业务规则 例如 恶意更改我的实体上
  • 我的下拉菜单上的淘汰验证不起作用

    我使用 durandal 模板 微风开发一个 ASP NET MVC 项目 我想在我的视图上定义验证逻辑以进行添加 编辑操作 到目前为止 它适用于文本 从数据库填充的下拉列表 当元素不包含任何数据时 由于剔除验证 该元素被标记为红色 但它不
  • Breejs:导航属性未添加到实体中

    我已经配置了我的 WebAPI ODATA 服务 使用 5 0 0 rc1 来支持 expand 和 select 一切似乎都工作正常 但导航属性除外 元数据确实包含我的导航属性 Mandate 上的 OpenPositions 然后我的微
  • Breezejs 与保存包有关的问题

    我使用breezejs 我的应用程序的服务器端代码是 net 在我看来 客户端 我想添加实体 然后我想保存它 让我们假设一个实体是这样的 Id 1 Name someName CreatedDate 1900 01 01T05 00 00Z
  • angularjs 和 requirejs 中“Q”和“q”的区别

    我正在创建一个基于 AngularJS Breeze 和 RequireJS 构建的单页应用程序 在使用 requirejs 设置 AMD 以与 Angular 和 Breeze 配合使用时 我遇到了 Breeze 对 q 的依赖问题 如果
  • Breeze 扩展实体属性仅在第二次查询时加载

    希望有人对 Breeze 的扩展实体有更好的了解 因为我被难住了 因此 我在服务器端 使用 Breeze 的 API 的 Web API 创建了一个分部类 WO Rout 并创建了一个名为 AssetJobEqNo 的属性 我已阅读并遵循
  • 控制器未过滤 DotNetNuke 模块中 Breeze 查询中的数据

    我试图将基本的 Breeze 示例包含在 DotNetNuke 模块中 它在独立的 WebAPI 项目中工作正常 为了简化操作 我删除了客户端 仅引用我在 Chrome 浏览器中进行的 URL JSON 调用 我可以看到我的元数据和完整的项
  • 为什么我的 Breeze.js 实体没有创建 ko.observables?

    我使用的 Breeze js 没有服务器端组件 并使用以下代码在客户端创建实体 根据沃德的要求 我简化了一切 并添加了更多信息 我的 MetaDataStore 配置功能 function configureMetadataStore me
  • angular-ui-select2和breezejs:输入2个字符后加载ajax列表

    我有一个项目 我使用 BreezeJS 从我的网络服务器获取数据 我将 AngularJS 与 ui select2 模块一起使用 目前 当我加载页面时 breezejs 会调用以获取我转储到作用域变量中的数据 从那里 select2 可以
  • 为什么我必须调用 NgZone.run 才能让我的视图在 Angular2 中使用 Breezejs 进行更新?

    我正在尝试学习 angular2 并使用 odata webapi 后端创建一个测试应用程序 在应用程序中 我有一个视图 它获取一系列项目 我想在我的视图中显示这些项目 为了从前端获取数据 我使用breezejs库 因为事实证明它在过去节省
  • 从 Web API .NET Core get 操作返回字符串

    我有一个 get 操作 我想从中返回一个字符串 一个例子是 000875 当我从完整的 NET Web API 控制器中的控制器返回此字符串时 它的格式如下 Property 000875 当我在转换后的 NET Core 控制器中返回字符
  • 从 C# 保存对 Breeze Web api 的更改

    我想创建一个 C 应用程序 它将使用 Breeze Web api 使用相同的 SaveChanges JObject saveBundle 操作将更改集保存到服务器 如何序列化并表示要发送到服务器的变更集 我的主要问题是在将变更集发送到服
  • 如何在微风中全局应用 MaxExpansionDepth 或应用到整个控制器

    我找到了这个答案 MaxExpansionDepth 与最新的 webapi 和微风 https stackoverflow com questions 19668693 maxexpansiondepth with latest weba
  • Breeze JS - 带有 EFContextProvider 的存储库,启用/禁用 OData 过滤

    我正在寻找使用微风 EFContextProvider 实现存储库模式 在此存储库中 我将公开一种使用 OData 过滤来查询数据库的方法 就像默认情况下微风的行为一样 我还想公开一个忽略 OData 过滤的方法 并返回一个元素列表 就好像
  • 带有工作单元/存储库模式的微风

    我只是想知道我应该如何实施微风EFContextProvider在一个单独的数据层项目中 另外 由于该项目是一个类库而不是 MVC 4 应用程序 我应该如何将其包含到我的项目中 我真的不需要 Breeze NuGet 包中的全部技巧 只需E
  • Breeze 使用 DB EntityType 管理 NODB EntityType

    我正在使用 Papa 的课程 CCJS 代码来研究 Breeze js 和 SPA 使用此代码 我尝试管理来自服务器的附加信息 但这不是来自 EntityFramework 的元数据中包含的实体 所以我创建了一个名为 Esto 的 NO D
  • Breeze.js 查询不更新淘汰赛视图

    我正在通过 Breeze js 查询数据 第一次运行良好 第二次视图未更新 html a Order by Newest a a Order by Score a div ul li strong span span strong span
  • Chrome//kendoUI/jQuery:超出最大调用堆栈大小

    我正在使用 hottowell 模板来创建 spa 应用程序 并且我从 jquery 中收到了一个很好的错误 基本上我的问题从此刻开始尝试绑定我的视图 viewModelBinder js 来自 durandal 库 viewModelBi
  • 使用 Newtonsoft.Json 反序列化 DbGeometry

    我正在使用 Angular Breeze 和 Web API 2 构建 SPA 遵循 John Papa 在他最新的 PluralSight 课程中概述的方法 一切运行良好 我可以将信息拉取 更新 插入 删除回服务器 但是 我正在使用空间类

随机推荐