如何在服务器端 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 页面而不导致页面刷新