2014-07-18 3 views
0

J'ai une application Breeze.Sharp qui communique avec l'ancien WebAPI qui ne fournit pas de métadonnées.Breeze # executeQuery renvoie des objets vides

La requête semble être exécutée correctement - le nombre attendu d'objets est renvoyé mais tous sont vides. La modification des paramètres de requête fonctionne également - le nombre d'objets retournés change comme prévu. Je jouais avec EntityManager.MetadataStore mais rien n'a aidé.

Voici le code final que j'utilise actuellement pour communiquer avec WebAPI.

public class DokumentModelBreeze: BaseEntity 
{ 
    public string id { get; set; } 
    public string numer { get; set; } 
    public decimal suma { get; set; } 
}  

... 

Configuration.Instance.ProbeAssemblies(typeof(DokumentModelBreeze).Assembly); 

var manager = new EntityManager("http://localhost:52357/api/"); 
manager.DataService.HasServerMetadata = false; 

var store = manager.MetadataStore; 
store.SetResourceName("dokumenty", typeof(DokumentModelBreeze), true); 
store.NamingConvention = new CamelCasePropertiesNamingConvention(); 

var builder = new EntityTypeBuilder<DokumentModelBreeze>(store); 
builder.DataProperty(d => d.id).IsPartOfKey(); 
using(TextWriter writer = File.CreateText("C:/metadata.txt")) { 
    store.ExportMetadata(writer); 

var query = new EntityQuery<DokumentModelBreeze>("dokumenty"); 
query = query.WithParameter("nrFirmy", 1).Where(p => p.numer=="123"); 
var results = await manager.ExecuteQuery<DokumentModelBreeze>(query); 
List<DokumentModelBreeze> Dokumenty = new List<DokumentModelBreeze>(); 
foreach(var item in results) 
    Dokumenty.Add(item); 

Dans la dernière boucle foreach chaque élément est de type DokumentModelBreeze mais chaque propriété de membre égal à null ou 0, respectivement.

J'ai sauvé MetadataStore de fichier, il est inclus ci-dessous:

{ 
    "metadataVersion": "1.0.3", 
    "namingConvention": { 
    "clientServerNamespaceMap": {}, 
    "name": "camelCaseProperties" 
    }, 
    "structuralTypes": [ 
    { 
     "shortName": "BaseEntity", 
     "namespace": "Breeze.Sharp", 
     "baseTypeName": "", 
     "autoGeneratedKeyType": "None" 
    }, 
    { 
     "shortName": "DokumentModelBreeze", 
     "namespace": "BRuNETWPF.ViewModels", 
     "baseTypeName": "BaseEntity:#Breeze.Sharp", 
     "autoGeneratedKeyType": "None", 
     "defaultResourceName": "dokumenty", 
     "dataProperties": [ 
     { 
      "name": "id", 
      "dataType": "String", 
      "isNullable": false, 
      "defaultValue": "", 
      "isPartOfKey": true 
     }, 
     { 
      "name": "numer", 
      "dataType": "String", 
      "isNullable": false, 
      "defaultValue": "" 
     }, 
     { 
      "name": "suma", 
      "dataType": "Decimal", 
      "isNullable": false, 
      "defaultValue": 0.0 
     } 
     ] 
    } 
    ], 
    "resourceEntityTypeMap": { 
    "dokumenty": "DokumentModelBreeze:#BRuNETWPF.ViewModels" 
    } 
} 

Suis-je manque quelque chose ou peut-être Breeze # ne permet pas d'interroger WebAPI sans métadonnées? Le même code exécuté pour le test WebAPI avec des métadonnées exposées fonctionne bien.

Répondre

1

Votre GetValue et les propriétés SetValue doivent être définies comme ceci:

public string id 
    { 
     get { return GetValue<string>("id"); } 
     set { SetValue(value); } 
    } 

Il est une douleur, je sais, mais cela me fixe pour après l'un de nos fils tech impressionnant a it out :)

Questions connexes