同じDbCommandを再利用し、同じ要求でDBにアクセスする必要があるたびに新しい接続を確立しないために、DbCommandを保存して返すメソッドを作成しましたそれが以前にインスタンス化された場合:それはモデルで使用されているかのASP.NetコアNpgsql操作が既に進行中
public static class InformacionInscripcionesViewModel {
private static NpgsqlConnection _dbConnection;
private static NpgsqlCommand _dbCommand;
private static NpgsqlCommand GetDbCommand() {
InformacionInscripcionesViewModel._dbConnection = InformacionInscripcionesViewModel._dbConnection ?? new NpgsqlConnection("Host=192.168.1.127;Username=siu;Password=123456;Database=guaraniprueba20160816");
if (InformacionInscripcionesViewModel._dbConnection.State == ConnectionState.Closed)
InformacionInscripcionesViewModel._dbConnection.Open();
return InformacionInscripcionesViewModel._dbCommand
?? (InformacionInscripcionesViewModel._dbCommand = new NpgsqlCommand {Connection = InformacionInscripcionesViewModel._dbConnection});
}
}
例:
var dbCommand = InformacionInscripcionesViewModel.GetDbCommand();
dbCommand.CommandText = @"SELECT sga_propuestas.nombre_abreviado AS nombre_carrera, ....";
dbCommand.ExecuteNonQuery();
を、私はそれを使用してURLに2つの同時要求を行うと、それはでdbCommand.ExecuteNonQuery();
で例外がスローされますメッセージAn operation is already in progress
。
これを防ぐにはどうすればよいですか?使用前に毎回DbCommand
をインスタントする必要がありますか?この上の任意の光?
{System.InvalidOperationException: An operation is already in progress.
at Npgsql.NpgsqlConnector.StartUserAction(ConnectorState newState)
at Npgsql.NpgsqlCommand.ExecuteNonQueryInternal()
at Npgsql.NpgsqlCommand.ExecuteNonQuery()
at SIUNPAZ.Models.InformacionInscripcionesViewModels.InformacionInscripcionesViewModel.GetTotalesInscripcionesPorMaterias(DateTime fechaDesde, DateTime fechaHasta, String carrera)
at SIUNPAZ.Controllers.InformacionInscripcionesController.PorMaterias(DateTime fechaDesde, DateTime fechaHasta, String carrera)
at lambda_method(Closure , Object , Object[])
at Microsoft.AspNetCore.Mvc.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeActionFilterAsync>d__28.MoveNext()}
したがって、NpgsqlConnectionまたはNpgsqlCommandを処分すべきですか? – JorgeeFG
確実に接続を廃棄してください。あなたはコマンドの接続プロパティを解除し、その後にそれを設定することができますが、あなたはあまりそれを保存していません(それ自身のコマンドは "light"です)。 'ブロックして自動的に処理させます。 –