我有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执行的相同代码运行良好。
答案 0 :(得分:1)
您的GetValue和SetValue属性必须如此定义:
public string id
{
get { return GetValue<string>("id"); }
set { SetValue(value); }
}
这是一种痛苦,我知道,但是在我们一位出色的技术主管指出它之后,这就解决了这个问题:)