不使用数据库的In-Memory类

时间:2014-11-01 10:28:00

标签: c# database asp.net-mvc-4 razor dbcontext

我有一个担忧。我想知道如何在Visual Studio 2010中使用MVC 4在c#.Net中使用内存类。我的意思是说我不想使用数据库或任何其他外部存储介质甚至存储库。

我想存储数据,从该类中检索数据。

我听说过"缓存"但它有其自身的局限性。

我也不使用任何类型的存储库,因为使用存储库,我已经使用http://www.edandersen.com/2013/05/30/asp-net-mvc-basics-part-2-viewmodel-to-model-mapping-and-editing/

那你可以建议我怎么做吗?

2 个答案:

答案 0 :(得分:1)

你的目标是什么?

如果数据持续存在很重要,则无法将其存储在内存中。由于许多原因,IIS应用程序可以随时重新启动。然后丢失数据,恕不另行通知。

如果数据用作缓存,则要么使用缓存,要么使用静态变量(正确同步)。

答案 1 :(得分:1)

您可以使用静态对象实例。例如,假设您有一个User类:

public class User
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

然后为您的实体设置一个静态容器:

public static class Container
{
    static Container()
    {
        Users = new ConcurrentBag<User>();
    }

    public static IEnumerable<User> Users { get; set; }
    ...
}

然后,您可以从代码中的任何位置访问此静态实例。显然,由于ASP.NET MVC是一个多线程环境,因此您需要正确地同步对这些变量的访问。例如,使用ConcurrentBag<User>而不是List<User>实现。

然后在您的控制器中,您可以访问内存中的数据存储:

public ActionResult Index(int id)
{
    var user = Container.Users.FirstOrDefault(x => x.Id == id);
    if (user == null)
    {
        return HttpNotFound();
    }

    return View(user);
}