- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为现有域层构建 Blazor 服务器前端。该层提供各种可注入(inject)服务来对 EF Core 存储库进行修改。为此,服务本身从(标准 Microsoft)DI 容器请求 DbContext。这适用于具有范围 DbContext 实例的常规 MVC.NET/Razor 页面,但作为 documented ,这是 Blazor 的问题。在 Blazor Server 应用程序中,我们希望使用 DbContextFactory 来生成用于操作的短期 DbContext 实例。
在同一个应用程序中同时拥有 DbContext 和 DbContextFactory 没有问题,但我很难理解如何调整我的服务。或者如果我什至需要?为了说明,这是当前代码:
我的页面:
@page “/items”
@inject ItemService ItemService
// somewhere in the code
ItemService.DoOperation(…)
我的服务
class ItemService
{
public ItemService(MyDbContext myDbContext)
{
…
}
public bool DoOperation(…)
{
…
_myDbContext.SaveChanges();
}
}
启动.cs:
services.AddDbContext<MyDbContext>(options => …),
contextLifetime: ServiceLifetime.Transient,
optionsLifetime: ServiceLifetime.Singleton
);
services.AddDbContextFactory<MyDbContext>(options => …);
根据
this answer 中给出的示例,我已经更改了 DbContext 的生命周期。到目前为止,我还没有能够创造任何问题,但我并不完全理解这里的生命周期问题。如何以一种明显的方式设计我的服务以在 Blazor 和 MVC/Razor Pages 应用程序中运行良好?
最佳答案
在典型的 MVC 应用程序中,一个请求代表一个工作单元。 DbContext 作为范围服务生成并通过构造函数注入(inject)。这可以。
另一方面,在 Blazor Server 中,一个请求不再代表单个工作单元。第一个请求创建了一个电路,这意味着注入(inject)的任何作用域服务都将有一个生命周期,如 here 所述。 .
在 Blazor Server 应用中,工作单元是 SignalR 消息。 (例如,单击按钮将新行添加到数据库)。因此,直接注入(inject)您的上下文 is not the way to go .
这就是 Blazor Server 具有 IDbContextFactory<T>
的原因。 .像这样初始化它:
services.AddDbContextFactory<DbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("WebDB")));
在您的 Razor 组件(绑定(bind)到 Blazor 应用程序)中,您可以像这样使用它:
private readonly IDbContextFactory<DbContext> factory;
public Component(IDbContextFactory<DbContext> f)
{
factory = f;
}
public void Click()
{
using(DbContext cnt = factory.CreateDbContext())
{
// Your code here
}
}
这将进一步解释
here .
关于c# - Blazor 服务器 : Mixing EF Core DbContextFactory with DbContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67374706/
使用 WebApi 处理 DotNetCore 解决方案项目和一个单独的Data包含 Entity Framework 实现的项目。我们一直在升级库,因为我们正在使用所有最新的核心内容。 在Data项
我的应用程序在 DbContext 处没有无参数构造函数实现,我不喜欢为 IDbContextFactory<> 提供无参数构造函数实现。 原因是我想控制 DbContext 指向的位置。这就是为什么
我正在为现有域层构建 Blazor 服务器前端。该层提供各种可注入(inject)服务来对 EF Core 存储库进行修改。为此,服务本身从(标准 Microsoft)DI 容器请求 DbContex
我正在遵循有关如何设置 EF Core 以在 Blazor 和 .NET Core 3.1 中安全工作的指南。 MS 文档在这里:https://docs.microsoft.com/en-us/as
我是一名优秀的程序员,十分优秀!