将 EfCore 延迟加载代理与 blazor 一起使用

Posted

技术标签:

【中文标题】将 EfCore 延迟加载代理与 blazor 一起使用【英文标题】:Using EfCore lazy-loading proxies with blazor 【发布时间】:2020-04-21 11:12:53 【问题描述】:

我在使用 Blazor 的 EfCore 中使用代理时遇到问题。如果在页面加载后的某个时间将对象传递给正在访问其代理属性的子组件,则上下文可能已经被释放,从而导致崩溃

尝试延迟加载实体类型上的导航属性“描述” 释放关联的 DbContext 后的“WeatherForecastProxy”。

需要延迟加载代理以避免主/详细样式用户界面中的笛卡尔爆炸,其中主列表中的每个实体都有自己的拥有实体的子列表,而这些子列表又拥有自己的连接。

基于官方 blazor 模板的最小可复现项目位于:https://github.com/alextech/sample_use_proxy_blazor

Utility Base Component class 应该是组件之间共享服务以避免线程问题的解决方案,正如 https://github.com/aspnet/AspNetCore/issues/18076 和 https://github.com/aspnet/AspNetCore/issues/10448 所建议的那样,但它仍然会导致崩溃

在前一个操作完成之前,在此上下文中启动了第二个操作。 这通常是由使用相同 DbContext 实例的不同线程引起的。

我是在正确使用该实用程序基础组件类功能,还是以非预期方式使用 efcore/blazor 组合?

【问题讨论】:

评论不用于扩展讨论;这个对话是moved to chat。 【参考方案1】:

不要将 DAL 模型直接传递到您的组件中,先将它们映射到 ViewModel 中,这是最佳实践。 如果您尝试从 Webassembly 客户端应用程序访问您的 DAL 模型,这是不可能的

【讨论】:

以上是关于将 EfCore 延迟加载代理与 blazor 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

Blazor 服务器:将 EF Core DbContextFactory 与 DbContext 混合

如何在 Blazor 服务器端模拟延迟?

休眠延迟加载不适用于 Spring Boot => 无法延迟初始化角色集合无法初始化代理 - 无会话

hibernate的延迟加载和抓取策略

登录 Blazor 服务器应用程序时如何显示加载图标?

代理模式