breezejs实体查询,选择返回undefined

时间:2013-03-13 15:22:37

标签: breeze

使用下面的代码我遇到的问题是,并非所有列都是data.results数组中的返回数据。例如,如果第1行的数据库中col4为null,则data.results [0]不包含col4的元素,但第2行有值,则data.results [1]将包含col4的值。我希望数组中的每个返回项包含具有数据库值的所有项或null。如果无法返回null,那么空字符串就可以了。

    var query = new breeze.EntityQuery()
             .from('mytable')
             .where('col1', 'substringof', '2')
             .select('col1,col2,col3,col4')
             .orderBy('col1')
             .take(200);


    return _manager
        .executeQuery(query)
        .then(function (data) {
            return data.results;
        })
        .fail(queryFailed);
}

1 个答案:

答案 0 :(得分:0)

默认情况下,breeze不会在其JSON结果中序列化空值。这是减少电线上微风有效载荷的有意选择。并且..这通常不是返回“实体”的查询的问题。即存在微风元数据的数据。因为已在此类实体上定义了属性。

但是,如果您按原样返回匿名结果,那么这可能是个问题。显然,您可以解决它,因为您知道要请求的属性,并且如果它们不在结果中,则可以在查询后更新它们。

但您也可以通过“BreezeConfig”类更改breeze的默认配置以适应这种情况。

BreezeConfig支持自定义支持Web API中与Breeze相关的操作的组件。 BreezeConfig定义默认行为;您可以通过从中导出并覆盖其虚拟方法来替换您自己的行为。 Breeze.NET将在您的项目引用的程序集中发现您的子类,并使用它而不是BreezeConfig。

使用BreezeConfig配置具有特定设置的Json.Net序列化程序。您可以通过编写BreezeConfig的子类来替换这些设置,该子类覆盖'CreateJsonSerializerSettings'方法,如下例所示:

public class CustomBreezeConfig : Breeze.WebApi.BreezeConfig {    
  protected override JsonSerializerSettings CreateJsonSerializerSettings() {   
    var baseSettings = base.CreateJsonSerializerSettings();      
    baseSettings.NullValueHandling = NullValueHandling.Include;
    return baseSettings;  
} 

希望这有帮助。