W innej aplikacji zostałem dotknięty złym projektem: wiele wątków wykonuje EnsureDatabaseSchemaExists()
jednocześnie metodę, która wygląda tak:
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'MyTable') AND type = N'U') BEGIN
CREATE TABLE MyTable ( ... );
END
Jednak nawet jeśli zostanie wykonany w transakcji SERIALIZABLE, kod ten nie wydaje się być bezpieczny dla wątków (tzn. Kod równoległy próbuje utworzyć tabelę wiele razy). Czy jest jakaś szansa, aby zmusić instrukcję SELECT do uzyskania blokady, która uniemożliwia innemu wątkowi wykonanie tej samej instrukcji SELECT?
Czy istnieje lepszy wzorzec dla metod wielowątkowych-ZapewnijSchemaExists ()?