我正在尝试在 Blazor Webassembly 中使用微风锐利。我已经能够为 .Net Standard 2.0 和 2.1 重新编译微风锐利,这显示了从服务器读取数据的积极结果。但是,当尝试从脚本加载元数据时,我注意到 MetadaStore.ImportMetadata 方法无法加载元数据。当我跟进时,我发现 Breeze.Sharp 需要来自微风服务器返回的元数据 json 的 metadataVersion 属性和 NamingConvention 节点。
我可以看到,首先元数据格式发生了变化,并且这些属性不再存在于生成的元数据中。但是,如果我使用 DataService 获取元数据,则元数据将加载到元数据存储中。
我的问题是......是否有计划更新微风锐以与 dotnet 平台的最新发展保持一致?请考虑它,因为它与 Blazor 非常吻合。实际上,我的实验非常顺利,期望加载本地存储的元数据,而不是每次都从服务器加载。
private void DeserializeFrom(JNode jNode, bool isFromServer) {
MetadataVersion = jNode.Get<String>("metadataVersion");
// may be more than just a name
var ncNode = jNode.GetJNode("namingConvention");
if (ncNode != null) {
var nc = Configuration.Instance.FindOrCreateNamingConvention(ncNode);
if (nc == null) {
OnMetadataMismatch(null, null, MetadataMismatchTypes.MissingCLRNamingConvention, ncNode.ToString());
} else {
// keep any preexisting ClientServerNamespaceMap info
NamingConvention = nc.WithClientServerNamespaceMapping(this.NamingConvention.ClientServerNamespaceMap);
}
}
// localQueryComparisonOptions
jNode.GetJNodeArray("dataServices").Select(jn => new DataService(jn)).ForEach(ds => {
if (GetDataService(ds.ServiceName) == null) {
AddDataService(ds);
}
});
jNode.GetJNodeArray("structuralTypes")
.ForEach(jn => UpdateStructuralTypeFromJNode(jn, isFromServer));
jNode.GetMap<String>("resourceEntityTypeMap").ForEach(kvp => {
var stName = kvp.Value;
if (isFromServer) {
stName = TypeNameInfo.FromStructuralTypeName(stName).ToClient(this).StructuralTypeName;
}
// okIfNotFound because metadata may contain refs to types that were already excluded earlier in
// UpdateStructuralTypeFromJNode
var et = GetEntityType(stName, true);
if (et != null) {
SetResourceName(kvp.Key, et);
}
});
}