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

Posted

技术标签:

【中文标题】如何在服务器端 Blazor 组件中访问实体框架 DbContext 实体【英文标题】:How to access Entity Framework DbContext entities in Server-Side Blazor Components 【发布时间】:2020-05-05 09:49:42 【问题描述】:

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

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

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

private ApplicationDbContext context = new ApplicationDbContext();

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

var things = context.Things.Where(t => t.ThingAttributes == something);

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

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

【问题讨论】:

【参考方案1】:

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

@inject DataService myDataService

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

Here's a link Blazor 团队的示例如何创建服务以及如何在组件中使用它。该服务不使用实体框架,但这是非常小的问题,我相信你会应付的。

【讨论】:

酷,有道理,谢谢。出于某种原因,在我看到的示例中,我认为该服务仅对使用 HttpClient 的 API 调用是必需的,但现在这也是 Entity Framework 的东西应该去的地方,这是有道理的。谢谢!

以上是关于如何在服务器端 Blazor 组件中访问实体框架 DbContext 实体的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core Blazor 服务器中的实体框架上下文生命周期

如何从 Blazor 服务器端应用程序中的 Razor 页面导航到 Blazor 组件?

如何从服务器端 Blazor 应用程序中的 Blazor 组件调用 razor 页面而不导致页面刷新

如何在服务器端 Blazor 中访问 HttpContext?

如何同时从不同的 Blazor 组件进行数据调用?

如何限制 Blazor 服务器端请求大小