2014-07-18 100 views
0

我有Breeze.Sharp應用程序,它與不提供元數據的傳統WebAPI進行通信。Breeze#executeQuery返回空對象

查詢似乎正確執行 - 預期的對象數量被返回,但它們都是空的。修改查詢參數也適用 - 返回對象的數量按預期更改。我在玩EntityManager.MetadataStore,但沒有任何幫助。

這是我目前用來與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); 

在最後的foreach循環中,每個項目的類型都是DokumentModelBreeze,但每個成員屬性分別等於null或0。

我已保存MetadataStore到文件,它包含如下:

{ 
    "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" 
    } 
} 

我失去了一些東西在這裏或者是微風#不允許查詢的WebAPI沒有元數據? 針對具有公開元數據的測試WebAPI執行的相同代碼運行良好。

回答

1

你的GetValue和性能的SetValue必須定義,像這樣:

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

這是一個痛苦,我知道,但這個固定爲我我們的真棒高科技線索之一後指出來:)