我应该如何使用LINQ将整个数据库存储在内存中

时间:2011-03-31 20:47:53

标签: c# asp.net linq-to-sql

现在我的ASP.NET应用程序中有一个名为universe的静态类。宇宙拥有行星和各种其他天体。当应用程序启动时,我希望应用程序将大部分数据库加载到内存中,因此在应用程序的生命周期内,需要对数据库进行很少的调用。

现在我在静态类中有几个名为universe的列表,我只是从每个表中选择所有数据并将它们放入各自LINQ对象的列表中。从那里我使用部分类扩展LINQ对象。但是我觉得应该有更好的方法来做这件事。如果这是一个愚蠢的问题,请提前抱歉。

public static List<ss_planets> planets = new List<ss_planets>();
public static List<ss_moons> moons = new List<ss_moons>();
public static void create_the_universe()
{
        ssDataContext db = new ssDataContext();

        var p = (from s in db.ss_planets select s);
        foreach (ss_planets pl in p)
        {
            planets.Add(pl);
        }

        var m = (from m in db.ss_moons select m);
        foreach (ss_moons mo in p)
        {
            moons.Add(mo);
        }
}

3 个答案:

答案 0 :(得分:2)

您可以使用LoadWith将所需的所有表格检索到内存中。

答案 1 :(得分:1)

在只读情况下的小应用程序中执行此操作没有任何问题。如果您大量查询这些列表并遇到性能问题,则应考虑创建词典。它们允许快速查找某些密钥。

您也可以考虑设置

ssDataContext.ObjectTrackingEnabled = false;

并应将上下文创建包装在using - 语句中,该语句为您提供:

using (ssDataContext db = new ssDataContext())
{
    ssDataContext.ObjectTrackingEnabled = false;

    // do your thing here
}

禁用对象跟踪会阻止您使用在此方案中无法执行的实体,并且可能会减少初始加载时间。

答案 2 :(得分:0)

为什么不使用内存数据库?

网站上的静态对象通常是个坏主意,因为每个请求都可以同时访问静态对象