使用Breeze展开属性,没有数据库(NoDb)

时间:2013-03-28 18:15:11

标签: breeze

通过创建自定义元数据定义并将其添加到breeze实体管理器,我已经成功地将breeze连接到服务器上的自定义类型。

但是,我无法请求在javascript中自定义的对象(Employee)并完全检索其关系。

换句话说,我有一个名为Employee的对象,它有一个名为“LoginStats”的属性,它是服务器上的List类型。使用Breeze请求此对象时,只有一个元素在集合中返回,而应该有6.

$ promise的结果如下:

data.results[0].loginStats()[0] //object
data.results[0].loginStats()[1] //undefined

奇怪的是,如果我单独选择属性,例如.select(“LoginStats”),它将返回完成数组中的6个项目。

如何在不使用微风调用拼写出所有所需属性的情况下检索此对象?我试图使用.expand()子句,但遗憾的是我们没有以一种使其工作的方式连接到EntityFramework。

提前致谢!

编辑:Here's a sample of what it looks like当我使用“select”语句与仅请求对象时。这些图像还展示了当我选择所有属性时会发生什么,即它们都被正确填充,但它们不再是可观察的。 Eeeek!

控制器代码:

        [HttpGet]
        public IQueryable<Employee> Get(string id)
        {
            var criterion = new Criterion<Employee, bool>(e => e.CustomerId == id);
            var loginStatisticsExtendedProperty = new FillEmployeeLoginStatistics(_UserRoleProvider, _CustomerLoginStatsViewModelRepository);
            var availableCompaniesForEmployess = new AvailableCompaniesForEmployess(_CompanyAffiliatesRepository);
            return _EmployeeRepository.Find(criterion, loginStatisticsExtendedProperty, _EmployeeDetailsExtendedProperty, availableCompaniesForEmployess);
        }

1 个答案:

答案 0 :(得分:0)

在没有看到您正在调用的服务器端控制器方法的情况下,很难确定。但我有几点建议。

首先确保您的控制器方法返回IQueryable集合。仅当您要使用客户端查询来进一步限制资源时,才需要这样做。通常只需在返回集合之前添加.AsQueryable()调用,就可以使任何集合成为IQueryable。

其次,“扩展”语法仅适用于EF支持的IQueryables。但是您仍然可以从客户端返回对象图,只要它们与父级一起“序列化”即可。对于“无数据库”类型资源,这通常意味着您强制在服务器上解析要发送到客户端的任何导航属性。如果你添加一个JsonResultsAdapter,你可以通过在'visitNode'方法内部的断点来实际“调试”到被序列化到客户端的内容。

如果不足,请发布控制器方法def。