首页 > 解决方案 > 如何在不同的 WebApp 之间共享 DbContext?

问题描述

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

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

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

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

很高兴得到一些输入。谢谢任何建议。

标签: dbcontextblazoref-core-3.1webui

解决方案


您不会将 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 应用程序一起使用。

希望这可以帮助...


推荐阅读