【问题标题】:How to share DbContext between different WebApps?如何在不同的 WebApp 之间共享 DbContext?
【发布时间】:2020-02-17 20:01:42
【问题描述】:

我缺少一个链接来了解在以下情况下如何将我的 EF 核心的 DbContext“连接”到不同的应用程序:

我有一个应用程序项目,其中包含整个 EF Core Code first 数据模型(实体、业务逻辑、枚举等)。

到目前为止,我们一直在使用 WebAPI 应用程序与多个端点共享数据。 所以我们现在交换的数据目前是相当静态的。我们创建了 DbContext,API 使用它进行数据读取和写入操作。

现在有客户要求也构建 WebUI (Blazor)。所以我们仍然希望在 UI 中使用 WebAPI 进行数据交换,但进一步我们需要来自数据模型的更多业务逻辑元素(包含 INotifyPropertyChanged 事件处理等)。我们在实体类中实现了事件句柄。因此,我们打算为每个包含 DbContext 实例的用户/客户端构建一个会话对象。但是如何将实例化的 DbContext 从 Web API 移交给我的 UI 应用程序。

很高兴能得到一些意见。感谢您的任何建议。

【问题讨论】:

  • 由于缓存问题,我每次需要时都重新创建 DBContext,因此无需移交给 UI。只需在 UI 中打开另一个 DBContext 实例。此外,在会话对象中保存 DBContext 也不起作用,因为 Context 的缓存不会被更新。

标签: dbcontext blazor ef-core-3.1 webui


【解决方案1】:

您不会将 DBContext 对象传递给“UI 应用程序”,例如 Blazor 应用程序。 您没有提到您使用的是什么风格的 Blazor...但是,以下内容可能适用于 Blazor Server App 和 Blazor WebAssembly App...根据我从您的问题中收集到的信息,您将 Web Api 端点暴露给检索数据并保存数据。这很好。剩下要做的就是在 Blazor 中创建访问这些端点的代码。您应该使用 HttpClient 服务来执行此操作。如果您使用 Blazor 客户端,则会配置此对象并使其可用于在您的组件和服务中注入。这种类型的 HttpClient 基于 JavaScript Fetch Api。

如果您要创建 Balzor 服务器应用程序,则必须将 HttpClient 服务添加到 DI 容器并进行相应配置,然后才能将其注入到您的组件和服务中。在这种情况下,您应该使用 IHttpClientFactory 来提供 HttpClien onjects。

原则上,您必须通过 HttpClient 查询您的 Web Api 方法。

请注意,如果您使用 Blazor Server 应用程序,则不必使用 Web Api。相反,您可以创建执行与 Web Api 提供的功能类似的服务。

请转至文档并了解如何将 HttpClient 与 Blazor 应用程序一起使用。

希望这会有所帮助...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    相关资源
    最近更新 更多