MVC6全球范围的价值

时间:2015-11-15 19:43:52

标签: asp.net-mvc entity-framework asp.net-core-mvc

我正在尝试为数据库提取网站名称,这是模型:

 public class Store
 {
     public int Id { get; set; }
     public string StoreName { get; set; }
 }

我要做的只是为此信息发出一个数据库请求。

SiteName目前在Navbar中使用,但可能会在其他地方使用。

我为Navbar创建了一个ViewComponent:

public class NavbarViewComponent : ViewComponent
    {
        private IStoreRepository _storeRepository;
        private string _storeName;
        public NavbarViewComponent(IStoreRepository storeRepository)
        {
            _storeRepository = storeRepository;
            _storeName = _storeRepository.GetStoreById(1).StoreName;
        }
        public IViewComponentResult Invoke()
        {
            return View((object)_storeName);
        }
    }

像这样访问:

@model string
<nav class="navbar navbar-default navbar-fixed-top">
    <div class="container-fluid">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" asp-controller="App" asp-action="Index">@Model</a> <!-- Here -->
...

问题是每次加载页面时都会调用数据库来获取它,这是可以理解的。但是,我不确定如何通过一次调用存储库来访问SiteName,并将其存储以供将来使用。

我想过将它加载到会话变量中,但实际上它应该在100%的时间内保持不变。

1 个答案:

答案 0 :(得分:2)

修改

如果这是整个应用程序中使用的变量,则以下信息是个好主意。但是,在这种情况下,问题是关于动态商店名称。结尾部分在这里不起作用。

我处理多租户应用程序的方法之一是创建一个获取商店名称的包装函数。基本上,将名称存储在HttpContext缓存中并使用包装函数从缓存中获取值,或者如果它未命中,则从数据库中获取它。

<appSettings>
    <add key="StoreName" value="My Store"/>
</appSettings>

适用于非动态变量

这听起来应该是web.config中的一个设置。快速获取值,可从应用程序中运行的任何程序集访问。

var storeName = ConfigurationManager.AppSettings["StoreName"];

并获取此值:

cache-control