Breeze #cuteQuery返回空对象

时间:2014-07-18 07:30:05

标签: breeze breeze-sharp

我有Breeze.Sharp应用程序,它与未提供元数据的旧版WebAPI进行通信。

查询似乎正确执行 - 返回预期的对象数但所有对象都为空。修改查询参数也有效 - 返回的对象数按预期更改。我正在玩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"
  }
}

我在这里遗漏了什么或者Breeze#不允许在没有元数据的情况下查询WebAPI吗? 对具有公开元数据的测试WebAPI执行的相同代码运行良好。

1 个答案:

答案 0 :(得分:1)

您的GetValue和SetValue属性必须如此定义:

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

这是一种痛苦,我知道,但是在我们一位出色的技术主管指出它之后,这就解决了这个问题:)