0

以下のコードでは、すべての列が 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);
}
4

1 に答える 1

0

デフォルトでは、breezeはJSON結果のnull値をシリアル化しません。これは、ワイヤー上のそよ風のペイロードを減らすための意図的な選択でした。そして..これは通常、「エンティティ」を返すクエリの問題ではありません。つまり、そよ風のメタデータが存在するデータ。プロパティはそのようなエンティティですでに定義されているためです。

ただし、匿名の結果をそのまま返す場合は、これが問題になる可能性があります。要求しているプロパティがわかっていて、結果に含まれていない場合はクエリ後に更新できるため、明らかに回避できます。

ただし、「BreezeConfig」クラスを使用して、これに対応するようにbreezeのデフォルト構成を変更することもできます。

BreezeConfigを使用すると、WebAPIでBreeze関連の操作をサポートするコンポーネントをカスタマイズできます。BreezeConfigはデフォルトの動作を定義します。そこから派生し、その仮想メソッドをオーバーライドすることで、独自の動作を置き換えることができます。Breeze.NETは、プロジェクトによって参照されるアセンブリの中からサブクラスを検出し、BreezeConfigの代わりにそれを使用します。

BreezeConfigを使用して、特定の設定でJson.Netシリアライザーを構成します。次の例に示すように、「CreateJsonSerializerSettings」メソッドをオーバーライドするBreezeConfigのサブクラスを作成することにより、これらの設定を置き換えることができます。

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

お役に立てれば。

于 2013-03-13T18:55:00.343 に答える