Breeze 当我检索完整的对象图时,只有一个子对象是可见的
我有一个大对象图,我想返回给客户机(整个模型的概述),所以我决定将其作为一个大对象发送回去(我将其作为有问题的对象返回) 然而,在Breeze中,我只得到每个依赖对象中的第一个对象。例如,我有一个“policy”对象和两个“vehicle”对象。我只看到一辆车(即使我在var p=data.results[0]上设置了一个断点)。调用返回的json显示了两辆车,但breeze只捕获了一辆 我该怎么做才能得到其他的呢?这是我的电话:Breeze 当我检索完整的对象图时,只有一个子对象是可见的,breeze,Breeze,我有一个大对象图,我想返回给客户机(整个模型的概述),所以我决定将其作为一个大对象发送回去(我将其作为有问题的对象返回) 然而,在Breeze中,我只得到每个依赖对象中的第一个对象。例如,我有一个“policy”对象和两个“vehicle”对象。我只看到一辆车(即使我在var p=data.results[0]上设置了一个断点)。调用返回的json显示了两辆车,但breeze只捕获了一辆 我该怎么做才能得到其他的呢?这是我的电话: var getPolicyByPolicyNumber = fu
var getPolicyByPolicyNumber = function (lob, policynumber, policyObservable) {
var params = {};
params['lOBCd'] = lob;
params['policyNumber'] = policynumber;
var query = EntityQuery.from('PolicyInquiry')
.withParameters(params);
return manager.executeQuery(query)
.then(querySucceeded)
.fail(queryFailed);
function querySucceeded(data) {
var p = data.results[0];
p.completeTree(true);
return policyObservable(p);
}
};
在我的微风控制器中,我有以下内容:
[System.Web.Http.HttpGet]
public Policy PolicyInquiry(string lOBCd, string policyNumber)
{
UserProfile userProfile = _contextProvider.Context.UserProfiles.SingleOrDefault(u => u.UserName == WebSecurity.CurrentUserName);
var policy = Uow.PolicyServices.GetPolicy(userProfile.BrokerId, userProfile.AgencyId, "csio:" + lOBCd, policyNumber);
return policy;
}
这是一个显示政策和车辆的简化模型:
public class Policy
{
public int Id { get; set; }
public string PolicyNumber { get; set; }
[InverseProperty("Policy")]
public ICollection<Vehicle> Vehicles { get; set; }
// other fields removed
}
public class Vehicle
{
public int Id {get; set}
public string ItemId { get; set; }
// other fields removed
//Foreign Keys
public int PolicyId { get; set; }
[IgnoreDataMember]
[ForeignKey("PolicyId")]
[Required]
public virtual Policy Policy { get; set; }
}
公共类策略
{
公共int Id{get;set;}
公共字符串PolicyNumber{get;set;}
[反向财产(“政策”)]
公共i收集车辆{get;set;}
//其他字段已删除
}
公车
{
公共int Id{get;set}
公共字符串ItemId{get;set;}
//其他字段已删除
//外键
public int PolicyId{get;set;}
[IgnoreDataMember]
[ForeignKey(“保单ID”)]
[必需]
公共虚拟策略策略{get;set;}
}
对不起,如果看不到“策略”及其元数据的底层实现,很难判断发生了什么。但我可以提出一个一般性建议
1) 如果要返回聚合对象并让Breeze识别其组成部分,建议使用的机制是创建投影并返回该投影。i、 例如
public IQueryable<Object> CompanyInfoAndOrders() {
return ContextProvider.Context.Customers.Select(c => new { Customer = c, Orders = c.Orders });
}
public IQueryable companyinfo和ders(){
返回ContextProvider.Context.Customers.Select(c=>new{Customer=c,Orders=c.Orders});
}
在本例中,假设Breeze具有客户和订单类型的元数据,
Breeze将解构结果,并将客户及其订单添加到EntityManager,并返回一组json对象,每个对象都带有“Customer”和orders属性。客户订单和个人订单也将根据当前模型库进行“调整”(即淘汰、主干或backingStore-用于Angular) 现在我看到了你的模型,我想我看到了问题所在 Breeze不会自动解析查询中的实体图。i、 e.如果检索策略,Breeze只返回策略实例本身,而不解析任何导航属性。这是经过设计的,因此单个查询不会破坏整个实体图 如果您想要任何导航属性的值,您有三个选项,其中第三个可能是您的最佳选择。为了便于解释,我简化了你的模型。这些都假设“策略”类型实际上定义为微风实体类型,即微风元数据存储中有元数据定义 1) 使用客户端EntityQuery.expand子句 2) 使用服务器端Include子句 更多信息请点击此处:
我希望这足够清楚 你是说模特儿吗?
var query = EntityQuery.from('Policy')
.expand("Vehicles")
.withParameters(params);
[System.Web.Http.HttpGet]
public IEnumberable<Policy>(string lOBCd, string policyNumber) {
return _contextProvider.Context.Policies.Where(....).Include("Vehicles");
}
[System.Web.Http.HttpGet]
public Object PolicyInquiry(string lOBCd, string policyNumber) {
UserProfile userProfile = _contextProvider.Context.UserProfiles.SingleOrDefault(u => u.UserName == WebSecurity.CurrentUserName);
var policy = Uow.PolicyServices.GetPolicy(userProfile.BrokerId, userProfile.AgencyId, "csio:" + lOBCd, policyNumber);
return new {
Policy = policy,
Vehicles = policy.GetVehicles() // insure that they are actually resolved on the server)
}
return policy;
}