如何在服务器端 Blazor 组件中访问实体框架 DbContext 实体

Jos*_*ula 1 entity-framework-core blazor blazor-server-side

我是 .NET Core 和 Blazor 的新手,主要有 WebForms 和 MVC 经验。

我发现的所有 Blazor 文档和教程都使用单独的 API 项目并通过 HttpClient 和 Json 序列化/反序列化访问数据。我明白为什么这对于使用 WebAssembly 的客户端 Blazor 来说是必要的,但是对于使用 SignalR 的服务器端Blazor,使用实体框架 DbContext 从组件的 .razor 文件直接访问数据库的最佳方法是什么?

例如,在 MVC 控制器中,您可以执行以下操作:

private ApplicationDbContext context = new ApplicationDbContext();
Run Code Online (Sandbox Code Playgroud)

然后通过执行以下操作来查询数据:

var things = context.Things.Where(t => t.ThingAttributes == something);
Run Code Online (Sandbox Code Playgroud)

在使用服务器端 Blazor 中的组件时,是否有一种干净且高效的方法?

很抱歉这个问题的广泛性质,请随时向我指出我应该已经阅读的博客、文档或教程。谢谢!

Isa*_*aac 5

你所说的控制器应该变成一个服务类,它从数据库中检索数据,并将其传递给调用方法。您应该将此服务添加到 Startup 类中的 DI 容器中。要在你的组件中使用这个服务,你应该像这样注入它:

@inject DataService myDataService
Run Code Online (Sandbox Code Playgroud)

我认为 Blazor 模板附带了如何定义此类服务并在您的组件中使用它的示例。

这是Blazor 团队提供的示例的链接,该示例介绍了如何创建服务以及如何在您的组件中使用它。该服务不使用实体框架,但这是非常小的事情,我相信您会应付。