0

我有 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 执行的相同代码运行良好。

4

1 回答 1

1

您的 GetValue 和 SetValue 属性必须像这样定义:

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

我知道这很痛苦,但是在我们的一位出色的技术负责人指出之后,这为我解决了这个问题:)

于 2015-03-23T13:51:30.337 回答