저장 프로 시저 내에서 결과를 저장할 임시 테이블을 만듭니다. 알아두면 이있는 경우 충돌이 발생합니다이이 저장 프로 시저에 의 연결 (단지 임시 테이블 name => 어떤 요청에 속하는지 구분할 수 없습니다).어떻게 C#에서 MySQL에 총 새로운 connetion을 만들 수 있습니까?
BEGIN
CREATE TEMPORARY TABLE IF NOT EXISTS TempTable (RowOrdinal INT DEFAULT 0);
INSERT INTO TempTable(RowOrdinal) VALUES (1);
SELECT COUNT(*) FROM TempTable;
END $$
동일한 연결에서이 상점을 호출 할 때마다 TempTable에 1 행이 추가됩니다.
내 C# 프로젝트에서 저장소 프로 시저를 호출하는 새로운 MySQL 연결을 만드는 몇 가지 방법을 테스트합니다. 내가 전화, 각각의 방법으로
public int CallStoreFunction()
{
var result = 0;
using(var connection = new MySqlConnection(connectionString))
{
connection.Open();
var command = new MySqlCommand("CALL store_proc()", connection)
result = int.Parse(command.ExecuteScalar().ToString());
connection.Close();
}
return result;
}
:
다음 새로운 인스턴스를함으로써 연결을 생성
public int CallStoreFunction() { return result = dbcontext.Database.SqlQuery<int>("CALL store_proc()"); }
를 사용하여, (엔티티 프레임 워크) 새로운 dbcontext 만들기 이 함수는 네 번이고 결과는 결국 4입니다 (상점에 대한 각 호출이 여전히 동일한 연결에 있음을 의미 함)
C#처럼 보이는 것은 새로운 연결이 아니라 새로운 세션/트랜잭션을 만듭니다. 어떤 접근 방식을 사용 하던지 상관 없습니다. 내가이 상점에 요청할 때마다 DB에 대한 총 다른 연결을 만드는 방법이 궁금합니다. 미리 감사드립니다.
임시 테이블을 만들 때 [임시 테이블 만들기]를 사용하고 있습니다. '] (https://dev.mysql.com/doc/refman/5.7/en/create-temporary-table.html) 구문, 맞습니까? EF와 ADO는 모두 연결 풀링을 사용하므로 연결이 해제 된 경우 (Close + Dispose로 수행하는 경우) 풀에서 동일한 연결을 반환하는 경우가 많습니다. 'TEMPORARY' 테이블은 세션마다 있어야하므로 연결 풀링을하더라도 테이블은 고유해야합니다. – StuartLC