何时加载设置表

问题描述 投票:0回答:1

我有一个使用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 entity-framework asp.net-core-mvc entity-framework-core
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.