Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 确定要建立多个数据上下文吗?_C#_Sql Server_Performance_Datacontext - Fatal编程技术网

C# 确定要建立多个数据上下文吗?

C# 确定要建立多个数据上下文吗?,c#,sql-server,performance,datacontext,C#,Sql Server,Performance,Datacontext,给定以下代码: public static void SomeLoop() { using(var db = new ArcadeContext()) { var changeRecs = db.ArcadeGameRanks.Where(c => c.Date == today); foreach (var rankRecord in changeRecs) { var rank = SomeMeth

给定以下代码:

public static void SomeLoop()
{
    using(var db = new ArcadeContext())
    {
        var changeRecs = db.ArcadeGameRanks.Where(c => c.Date == today);
        foreach (var rankRecord in changeRecs)
        {
            var rank = SomeMethod(rankRecord.GameID);
            UpdateGamesCatRank(rankRecord.GameID, rank);
        }
    }
}

public static void UpdateGamesCatRank(int gameID, int catRank)
{
    using(var db = new ArcadeContext())
    {
        db.ExecuteCommand("UPDATE ArcadeGame SET CategoryRank = " + catRank + " WHERE ID = " + gameID);
    }
}
运行SQL Server Profiler时,我会收到大量重复的
审核登录
审核注销
消息,这些消息似乎会影响性能:

我自学C#,所以我知道我很有可能在做一些不典型的事情


我的问题是,上述设计模式被认为是好的吗?或者我应该将数据上下文作为参数重新使用/传递给函数,以便在每次调用函数时不需要重新建立它们?(如果我认为重复创建新数据上下文是导致登录和注销的原因)。

由于您的上下文已经实例化,请将其传递给您的方法

public static void SomeLoop()
{
    using(var db = new ArcadeContext())
    {
        var changeRecs = db.ArcadeGameRanks.Where(c => c.Date == today);
        foreach (var rankRecord in changeRecs)
        {
            var rank = SomeMethod(rankRecord.GameID);
            UpdateGamesCatRank(rankRecord.GameID, rank, db);
        }
    }
}

public static void UpdateGamesCatRank(int gameID, int catRank, ArcadeContext db)
{
    db.ExecuteCommand("UPDATE ArcadeGame SET CategoryRank = " + catRank + " WHERE ID = " + gameID);
}

这将在完成foreach循环时通过处理上下文来执行查询、返回和解析。

这不是一个好主意。这可能只是一个示例来说明您的观点,但我认为不需要一个全新的方法来执行sql命令。把这个命令放到你的循环中。为每个调用实例化一个新的db上下文会降低您的性能。

@SLaks您能在回答中详细说明一下吗?