C# 在不影响DB的情况下重用数据-ASP.NET MVC

C# 在不影响DB的情况下重用数据-ASP.NET MVC,c#,asp.net-mvc,C#,Asp.net Mvc,我正在修改已编写的复杂函数,它们使用以下代码: private List<string> Values() { if (ViewBag.Sample == null) { ViewBag.Sample = TestData(); } } // where TestData() hits the DB and returns corresponding result 私有列表值() { 如果(ViewBag.Sample==null) { Vi

我正在修改已编写的复杂函数,它们使用以下代码:

private List<string> Values()
{
    if (ViewBag.Sample == null)
    {
        ViewBag.Sample = TestData();
    }
}
// where TestData() hits the DB and returns corresponding result
私有列表值()
{
如果(ViewBag.Sample==null)
{
ViewBag.Sample=TestData();
}
}
//其中TestData()命中数据库并返回相应的结果
Values()被称为同一文件中的多个位置,第一次点击DBTestData()返回,下一次调用直接从ViewBag返回

这是一个好方法吗

我们在MVC中有哪些替代方法来处理这个场景?因为DB hit是一个代价高昂的调用,我们需要使用其他一些技术


谢谢

代码应该确保您仅在第一次调用该方法时才接触数据库。
如果在多个页面上使用相同的数据,那么在Cache或Session类中也可能有很多数据。

该代码应确保仅在第一次调用该方法时才接触数据库。
如果在多个页面上使用相同的数据,那么在缓存或会话类中也会有很多数据。

如果从数据库检索到的数据的大小不是很大,那么您可以使用


否则,您也可以将数据存储在中。

若从数据库检索到的数据的大小不是很大,那个么您可以使用


否则,您也可以将数据存储在中。

您可以选择保留数据,如会话、缓存

您可以选择保留会话、缓存等数据

[OutputCache(持续时间=60)]//缓存60秒
[OutputCache(Duration = 60)] // Caches for 60 seconds
private List<string> Values()
{
    if (ViewBag.Sample == null)
    {
        ViewBag.Sample = TestData();
    }
}
私有列表值() { 如果(ViewBag.Sample==null) { ViewBag.Sample=TestData(); } }
[OutputCache(持续时间=60)]//缓存60秒
私有列表值()
{
如果(ViewBag.Sample==null)
{
ViewBag.Sample=TestData();
}
}
MVC型号活页夹

MVC型号活页夹


您可以这样在会话中保存数据:

Session['*your session key*'] = TestData();
var myData = Session['*your session key*'] as YourObject //cast it to an object if you need to.
然后像这样检索它:

Session['*your session key*'] = TestData();
var myData = Session['*your session key*'] as YourObject //cast it to an object if you need to.
或者您可以使用缓存:

System.Web.HttpRuntime.Cache[cacheKey] = TestData
和检索:

var myData =System.Web.HttpRuntime.Cache[cacheKey] as YourObject

您可以这样在会话中保存数据:

Session['*your session key*'] = TestData();
var myData = Session['*your session key*'] as YourObject //cast it to an object if you need to.
然后像这样检索它:

Session['*your session key*'] = TestData();
var myData = Session['*your session key*'] as YourObject //cast it to an object if you need to.
或者您可以使用缓存:

System.Web.HttpRuntime.Cache[cacheKey] = TestData
和检索:

var myData =System.Web.HttpRuntime.Cache[cacheKey] as YourObject

“重用数据而不命中数据库”-通常称为“缓存”-“重用数据而不命中数据库”-通常称为“缓存”