首页 > 解决方案 > Breeze.Sharp 无法从 Breeze Server for ASP.NET Core 3 导入元数据

问题描述

我正在尝试在 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);
    }
  });
}

标签: breezebreeze-sharp

解决方案


我一直在密切关注新的发展,这是我迄今为止注意到的。

  1. 微软正在复兴名为 Microsoft Restier 的产品。首先它是在 .Net Framework Platform 上开发的,但现在他们正在重写它以在 .Net Core 上运行,预计将在 2020 年上半年 0f 进入 RTM。这个 Microsoft Restier 的一个好处是你的完整实体上下文作为 OData 端点公开,您的实体列表公开,无需在操作上创建控制器。通过这种方式,它减少了为每个要公开为 OData 资源的实体编写操作的繁琐工作,这与普通 OData 和 Breeze Server 的当前情况不同。配置和可扩展性有很多领域。

  2. Microsoft 正在以 OData Connected Service 的形式重塑 RIA 数据服务。这以与 RIA 数据服务相同的方式创建代理。生成代理后,无需创建客户端数据模型。在服务器上创建的模型就足够了......不像微风尖锐的情况,你需要在客户端上创建一个模型,尽管有迹象表明在 DevForce 他们正在探索使用 PostSharp 以使使用 POCO 对象之间共享成为可能微风服务器和客户端。但是,我们不知道什么时候可以使用。

  3. OData Connected Service 与 Blazor 服务器无缝协作(在客户端有一些正在处理的错误),并消除了使用裸骨 HttpClient 的麻烦。

  4. 至于breeze Sharp,它目前适用于 Blazor Server 和 Web Assembly 版本(Breeze Sharp Standard)。我认为他们将重新设计他们的产品并使其能够像 Breezejs 一样与 OData 一起使用。这与 Microsoft.Restier 相结合将使生活变得非常轻松。实际上,微风具有非常好的功能,尤其是在缓存方面。

让我们等着看。


推荐阅读