Breeze 当我检索完整的对象图时,只有一个子对象是可见的

Breeze 当我检索完整的对象图时,只有一个子对象是可见的,breeze,Breeze,我有一个大对象图,我想返回给客户机(整个模型的概述),所以我决定将其作为一个大对象发送回去(我将其作为有问题的对象返回) 然而,在Breeze中,我只得到每个依赖对象中的第一个对象。例如,我有一个“policy”对象和两个“vehicle”对象。我只看到一辆车(即使我在var p=data.results[0]上设置了一个断点)。调用返回的json显示了两辆车,但breeze只捕获了一辆 我该怎么做才能得到其他的呢?这是我的电话: var getPolicyByPolicyNumber = fu

我有一个大对象图,我想返回给客户机(整个模型的概述),所以我决定将其作为一个大对象发送回去(我将其作为有问题的对象返回)

然而,在Breeze中,我只得到每个依赖对象中的第一个对象。例如,我有一个“policy”对象和两个“vehicle”对象。我只看到一辆车(即使我在var p=data.results[0]上设置了一个断点)。调用返回的json显示了两辆车,但breeze只捕获了一辆

我该怎么做才能得到其他的呢?这是我的电话:

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;
}