gpt4 book ai didi

javascript - Breeze 扩展属性 - 如何在 Controller 数组中引用

转载 作者:行者123 更新时间:2023-11-28 07:59:28 25 4
gpt4 key购买 nike

在我第一次尝试使用 Breeze 和 EF6(Hottowel/John Papa 风格)提取实体的完整实体图时,我缺少一个关键的理解

我的父子孙关系为Policies-P_Locations-P_Hazards

我想查看一个客户的所有政策的图表

简而言之,我的查询返回了我期望的 JSON 形状(在 XHR 查看器中确认),并且 data.results 允许我向下钻取(通过 backingstore - 我们需要像 C# 这样的 javascript 查看器吗)来查看数组儿孙。我看到了我对客户期望的所有政策、位置和危险(DLL 版本和模型/模型映射代码在帖子末尾)

数据上下文:

    function getPoliciesByClientsId(clientsid) {

var policies;

return EntityQuery.from('Policies')
.withParameters({ clientsid: clientsid })
.expand('P_Locations, P_Locations.P_Hazards')
.using(manager).execute()
.then(querySucceeded, _queryFailed);

function querySucceeded(data) {
policies = data.results;
log('Retrieved [Policy] from remote data source', policies.length, true);

return policies;
}

}

Controller :

function getPoliciesByClientsId(clientsid) {

return datacontext.getPoliciesByClientsId(clientsid).then(function(data) {
vm.Policies = [];
vm.Policies = data;
// at this point vm.Policies shows an object array
// and I can see p_Locations for each policy and p_Hazards for each location
// but vm.Policies.p_locations is undefined

return vm.Policies;
}
);


}

如果我深入了解 Controller 中的 datacontext 或 vm.Policies 中的策略,我会看到驼峰式数组。

但是

vm.Policies.p_Locations 未定义。当然我也想引用 vm.Policies.p_Locations.p_Hazards。

为了引用数据图进行绑定(bind),我缺少什么

Breeze Controller :

[HttpGet]
public IQueryable<Policy> Policies()
{
return _repository.Policies;
}

PwiRepository

    public IQueryable<Policy> Policies
{
get { return Context.Policies; }
}

这就创建了这个请求:

Request URL:http://localhost:29130/breeze/Breeze/Policies?$expand=P_Locations%2CP_Locations%2FP_Hazards&clients_id=439

使用ma​​nager.metadataStore.getEntityType('P_Location'),然后钻取导航属性,我找到了这些

navigationProperties: Array[4]0: 

dassociationName: "P_Hazard_P_Location"
entityType: l
entityTypeName: "P_Hazard:#Pwi.Model.Models"
foreignKeyNames: Array[0]
foreignKeyNamesOnServer: Array[0]
invForeignKeyNames: Array[1]
invForeignKeyNamesOnServer: Array[1]
inverse: disScalar: falsename: "p_Hazards"
nameOnServer: "P_Hazards"
parentType: lvalidators: Array[0]

associationName: "P_Location_Policy"
entityType: lentityTypeName: "Policy:#Pwi.Model.Models"
foreignKeyNames: Array[1]
foreignKeyNamesOnServer: Array[1]
invForeignKeyNames: Array[0]
invForeignKeyNamesOnServer: Array[0]
inverse: disScalar: truename: "policy"
nameOnServer: "Policy"parentType: l
relatedDataProperties: Array[1]validators: Array[0]__proto__: Objectlength: 4

这是dll 件

<packages>
<package id="Breeze.Server.ContextProvider" version="1.4.17" targetFramework="net45" />
<package id="Breeze.Server.ContextProvider.EF6" version="1.4.17" targetFramework="net45" />
<package id="Breeze.Server.WebApi2" version="1.4.17" targetFramework="net45" />
<package id="EntityFramework" version="6.1.1" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Client" version="5.2.0" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.Core" version="5.2.0" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.OData" version="5.2.0" targetFramework="net45" />
<package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.0" targetFramework="net45" />
<package id="Microsoft.Data.Edm" version="5.6.2" targetFramework="net45" />
<package id="Microsoft.Data.OData" version="5.6.2" targetFramework="net45" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
<package id="Newtonsoft.Json" version="6.0.4.0" targetFramework="net45" />
<package id="System.Spatial" version="5.6.2" targetFramework="net45" />
<package id="WebActivator" version="1.5.3" targetFramework="net45" />
</packages>

我有 Policies-P_Locations-P_Hazards 的父子孙关系下面是模型的相关部分以及模型映射

P_位置模型:

public partial class P_Location
{
public P_Location()
{
this.P_GlCoverages = new List<P_GlCoverage>();
this.P_Hazards = new List<P_Hazard>();
this.P_PropertyCoverages = new List<P_PropertyCoverage>();
}
public int P_Locations_id { get; set; }
public int Policies_id { get; set; }
......

public virtual Policy Policy { get; set; }
public virtual ICollection<P_Hazard> P_Hazards { get; set; }

P_LocationMap

 // Relationships
this.HasRequired(t => t.Policy)
.WithMany(t => t.P_Locations)
.HasForeignKey(d => d.Policies_id);

P_危险模型

public Policy Policy { get; set; }
public P_Location P_Location { get; set; }

P_HazardMap

  // Relationships
this.HasRequired(t => t.P_Location)
.WithMany(t => t.P_Hazards)
.HasForeignKey(d => d.P_Locations_id);

最佳答案

首先,我会检查以确保查询返回的对象实际上是实体。即它们每个都有“entityAspect”属性吗?如果没有,您将返回投影而不是实体。发生这种情况的原因有多种,但通常是由于命名约定问题或 EntityQuery 上缺少“toType”调用。 (如果查询端点不在实体类型/资源名称映射中,则需要,这通常是参数化查询的情况)。

我还会使用 getEntityType 查看MetadataStore,并确保每个实体的属性名称符合您的预期。

您也可以发布服务器端查询吗?

关于javascript - Breeze 扩展属性 - 如何在 Controller 数组中引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25610152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com