Entity Framework Базовые транзакции с параметрами - PullRequest
0 голосов
/ 02 мая 2018

Это упрощенный пример, но показывает ошибку, с которой я сталкиваюсь. Я пытаюсь запустить в транзакции две команды, обе из которых имеют параметры.

Пример

using (var db = new BloggingContext())
{
    using (IDbContextTransaction t = db.Database.BeginTransaction())
    { 
        using (var cmd = (IDbCommand) new SqlCommand())
        {
            cmd.CommandText = "CREATE TABLE [#sessionlist] (Id bigint);" +
                "Insert into #sessionlist " +
                "select BlogId from blogs " +
                "where rating >= 10";
            cmd.CommandType = CommandType.Text;

            var p = cmd.CreateParameter();
            p.ParameterName = "rating";
            p.Value = 10;
            cmd.Parameters.Add(p);

            cmd.Connection = db.Database.GetDbConnection();
            cmd.Transaction = t.GetDbTransaction();
            cmd.ExecuteNonQuery();
        }

        using (var cmd = (IDbCommand) new SqlCommand())
        {
            cmd.CommandText = "update blogs set rating = @rating where BlogId in (select * from #sessionList)";
            cmd.CommandType = CommandType.Text;

            var p = cmd.CreateParameter();
            p.ParameterName = "rating";
            p.Value = 10;
            cmd.Parameters.Add(p);

            cmd.Connection = db.Database.GetDbConnection();
            cmd.Transaction = t.GetDbTransaction();
            cmd.ExecuteNonQuery();
        }

        t.Commit();
    }
}

Выполнение этой команды завершается неудачно с недопустимым именем объекта #sessionlist, так как кажется, что он не выполняется в той же транзакции. Если в первом cmd изменен, то параметры НЕТ добавляются, а вместо этого параметр жестко закодирован. Это выполняется нормально.

Как выполнить несколько команд в одной транзакции, каждая из которых имеет свои параметры?

Рабочий код является более сложным и требует, чтобы обе команды были разделены, так как он создает тяжелую временную таблицу, на которую ссылается вторая команда.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...