【问题标题】:Breeze metadata and deserializing objectsBreeze 元数据和反序列化对象
【发布时间】:2013-12-12 15:57:06
【问题描述】:

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

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

 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 和 Vision 属性。

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

【问题讨论】:

  • 您能否发布查询、控制器中的方法和对象 A 的 C# 模型?可能还定义了对象 Y 和 B(至少具有 ID 和外键的重要部分)。
  • 感谢您的回复,请查看更新后的问题。

标签: breeze


【解决方案1】:

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

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

如果客户想要相关实体,它可以通过扩展子句来请求它们:

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

查看the documentation on queries and expand

2013 年 12 月 11 日更新

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

剩下的谜团是为什么 someDesignType.Vision 返回 null。

请阅读"Query response debugging",特别关注Product 上的引用导航属性和指向DesignType 的外键属性。如果您仍然感到困惑,请向我们展示 Vision 导航属性的详细信息,如那里所述。

【讨论】:

  • 我的服务器端查询是:(DbQuery)Context.Include("VisionType");所以至少我应该看到Vision实体。我读过这个关于 (referentialConstraint) 的问题,所以请您提供反馈:stackoverflow.com/questions/17158159/…
  • 感谢更新,我用这两个实体更新了我的问题,现在让我们忽略产品吧,我认为它的问题类似。如您所见,没有什么特别之处,我将这本书作为您的文档。如果您需要任何其他输入来找出问题,请告诉我。
  • 顺便说一句,我在查询响应调试中读到:您是否定义了外键 (FK) 属性?开发人员经常忽略定义或识别 FK 属性。 Breeze 需要 FK 属性来实现导航属性。在某些情况下,您可以在没有 FK 的情况下定义导航属性,但 Breeze 将无法在缓存中维护这些属性。我如何在 EF5 中的代码中做到这一点,而不在设计器中这样做?谢谢...
  • EF 培训超出了 Breeze 问题的范围。您可能想向了解她的东西的 Julie Lerman 学习。以“Code First Relationships Fluent API”开头。
  • 好的,谢谢。至少我知道与 FK 有关的问题。这很可悲,所以我必须为所有实体做这件事,我希望微风可以做到没有像 Ria 服务和 silverlight 一样。
猜你喜欢
  • 1970-01-01
  • 2016-10-14
  • 2014-12-24
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 2020-02-24
  • 2020-05-03
相关资源
最近更新 更多