何时加载设置表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了何时加载设置表相关的知识,希望对你有一定的参考价值。

我有一个使用asp.net MVC Core的Web应用程序,以及实体框架核心。该应用程序的一部分有一个简单的设置表。这只是一个表,只有一个记录,其中包含许多字段,因此管理员可以轻松更改Web应用程序的工作方式。

设置表被加载到静态“设置”类中,因此应用程序中的任何位置都可以读取它(视图和控制器)

我想知道的是何时或如何加载它的最佳位置。在设置路由之后,我正在Startup.Configure中加载它。

在大多数情况下,这很好。但是,如果我在设置表中添加一个字段,则无法迁移(我首先使用代码)。我收到有关无效字段的错误。通常,错误看起来像这样:

An error occurred while calling method 'BuildWebHost' on class 'Program'. Continuing without the application service provider. Error: One or more errors occurred. (Invalid column name 'EmailApiKey'.
Invalid column name 'EmailBaseUrl'.
Invalid column name 'EmailSenderAddress'.
Invalid column name 'EmailSenderDomain'.
Invalid column name 'EmailSenderName'.)
Unable to create an object of type 'ApplicationDbContext'. Add an implementation of 'IDesignTimeDbContextFactory<ApplicationDbContext>' to the project, or see https://go.microsoft.com/fwlink/?linkid=851728 for additional patterns supported at design time.

为了解决这个问题,我必须删除加载安装表的代码。

这让我觉得这不是加载设置的最佳位置/方式(看起来好像它阻碍了数据库迁移)。

那么 - 有更好的方法吗?基本上,我想:

  • 应用程序首次启动时加载一次安装表。
  • 在应用程序(视图和控制器)中的任何位置都可以访问它。
  • 如果用户更改了设置,则应自动更新静态版本。
答案

我会在第一次访问时而不是在应用程序启动时加载设置。一个优点是,如果延迟加载失败,您只需在下次访问时再试一次。

如果用户更改了设置,则应自动更新静态版本。

您可以将其缓存在ASP.NET缓存或MemoryCache中。您可以设置过期时间,以便在用户进行更改时定期刷新。或者,如果设置在SQL Server数据库中,则可以使用the SqlCacheDependency class

以上是关于何时加载设置表的主要内容,如果未能解决你的问题,请参考以下文章

如何知道片段何时在 viewpager 中实际可见

自定义 UITableViewCell 背景,何时重新加载等

FragmentManager 已经在执行事务。提交后何时初始化寻呼机是安全的?

何时加载和设置 min/maxTrackImages 以便它们出现在 IB 中

如何知道何时调用了`navController.popBackStack()`?

仅在冷启动或设置更改时重新加载表数据