【发布时间】:2020-01-09 13:24:52
【问题描述】:
在我的控制器中,[POST] 方法通常从数据库中调用存储过程。我想知道我是否在做正确的事情以避免并发问题。以如下方法为例:
[HttpPost]
public async Task<IActionResult> Create(Phase phase)
{
int releaseId = (int)TempData["id"];
string connectionString = Configuration["ConnectionStrings:DefaultConnection"];
using (SqlConnection connection = new SqlConnection(connectionString))
{
string sql = "CreatePhase";
using (SqlCommand command = new SqlCommand(sql, connection))
{
command.CommandType = CommandType.StoredProcedure;
// adding parameters
SqlParameter parameter = new SqlParameter
{
ParameterName = "@Name",
Value = phase.Name,
SqlDbType = SqlDbType.VarChar,
Size = 50
};
command.Parameters.Add(parameter);
parameter = new SqlParameter
{
ParameterName = "@ReleaseId",
Value = releaseId,
SqlDbType = SqlDbType.Int
};
command.Parameters.Add(parameter);
connection.Open();
await command.ExecuteNonQueryAsync();
connection.Close();
}
}
return RedirectToAction("Index", "Phase", new { id = releaseId });
}
await command.ExecuteNonQueryAsync(); 是避免并发的正确方法吗?它有什么作用吗?有没有更好的方法来实现这一点,或者这是否足够好?
【问题讨论】:
-
附注:当你使用'using'语句时,你不必手动关闭连接,'using'语句无论如何都会关闭它
-
不,
await command.ExecuteNonQueryAsync()与并发问题无关。也不清楚为什么要避免并发,通常人们努力实现它。 -
@GSerg 那么它对我有什么帮助吗?如何处理并发问题?
-
你所说的并发问题是什么意思?
-
例如 - 2 个用户想要同时更新
Phase(虽然在原始帖子中我使用了Create()方法)。通过“并发问题”,我理解如果两个用户都想同时更新,它不会允许他们。
标签: c# asp.net-core concurrency