0

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

但是,我无法请求已在 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 以使其工作。

提前致谢!

编辑:这是我使用“选择”语句与仅请求对象时的示例。这些图像还演示了当我选择所有属性时会发生什么,即它们都正确填写,但它们不再是可观察的。哎呀!

控制器代码:

        [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);
        }
4

1 回答 1

0

如果没有看到您正在调用的服务器端控制器方法,就很难确定。但我有几个建议。

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

其次,“扩展”语法将仅针对 EF 支持的 IQueryables 运行。但是您仍然可以从客户端返回对象图,前提是它们与父对象一起“序列化”。对于“no db”类型的资源,这通常意味着您在服务器上强制解析您想要发送到客户端的任何导航属性。如果您添加一个 JsonResultsAdapter,您实际上可以通过在“visitNode”方法内部设置断点来“调试”正在序列化到客户端的内容。

如果这还不够,请发布您的控制器方法 def。

于 2013-03-28T20:07:23.427 回答