Breeze元数据和反序列化对象

时间:2013-12-10 06:05:44

标签: breeze

我遇到了breeze元数据的问题。我开发了一个带微风控制器的系统。我在元数据中看到了我的模型,包括所有导航属性。当我从服务器获取数据时,我看到我的对象填充了期望的字段,但客户端的反序列化对象只包含没有集合的简单字段。

我在服务器中看到了元数据和返回的对象,如下所示:

 public partial class DesignType
    {      
        public DesignType()
        {        
            this.Product = new HashSet<Product>();
        }

        public int Id { get; set; }       
        public string Name { get; set; } 
        public string Code { get; set; }        

        public virtual ICollection<Product> Product { get; set; }
        public virtual VisionType Vision { get; set; }        
    }

public partial class VisionType
    {   

        public VisionType()
        {    

            this.DesignType = new HashSet<DesignType>();
        }

        public int Id { get; set; } 
        public string Name { get; set; } 

        public virtual ICollection<DesignType> DesignType { get; set; }
    }

以下是查询代码:

var query = breeze.EntityQuery.from("Designs");
            breeze.manager.executeQuery(query).then(function (queryResult) {
                callback(queryResult.results)
            }).fail(function (queryFailed) {
                error(queryFailed);
            });

结果对象仅包含简单数据属性,并忽略属性ICollection Product and Vision。

任何想法。 提前谢谢......

1 个答案:

答案 0 :(得分:1)

您的查询只询问根类型DesignType,因此应该返回所有内容。我假设你的服务器端方法没有返回相关的ProductVision实体(它可以做,但我打赌你没有做到这一点)。

所以Breeze正在做你所要求的。

如果客户想要相关实体,它可以使用expand子句来询问它们:

breeze.EntityQuery.from("Designs")
      .expand('Products, Vision')

查看the documentation on queries and expand

2013年12月11日更新

如果我理解您的评论,(a)您现在明白为什么您没有看到Product,因为您既没有在客户端上请求产品也没有将它们从服务器中推出,(b)您的网络API是包括相关的Vision实例和(b)您在查询的JSON响应中看到Vision数据。

剩下的谜团是someDesignType.Vision返回null的原因。

请阅读"Query response debugging",特别关注参考导航属性和Product上指向DesignType的外键属性。如果你仍然感到神秘,请告诉我们Vision导航属性的细节如何解释。