অন্য একটি অ্যাপ্লিকেশনটিতে আমি খারাপ ডিজাইনের দ্বারা আঘাত পেয়েছিলাম: একাধিক থ্রেড EnsureDatabaseSchemaExists()
একইসাথে একটি পদ্ধতি চালায় যা মূলত: এরূপ দেখায়:
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'MyTable') AND type = N'U') BEGIN
CREATE TABLE MyTable ( ... );
END
তবে, একটি সিরিয়ালিজেবল লেনদেনে কার্যকর করা হলেও এই কোডটি থ্রেড-নিরাপদ বলে মনে হচ্ছে না (অর্থাত্ সমান্তরাল কোডটি একাধিকবার টেবিল তৈরি করার চেষ্টা করে)। অন্য কোনও থ্রেডকে একই একই নির্বাচনী স্টেটমেন্টটি করতে বাধা দেয় এমন লক অর্জনের জন্য এসইএলপেট-স্টেটমেন্টকে জোর করার কোনও সুযোগ আছে কি?
মাল্টি-থ্রেডেড-এনএসিউরসকেমাএক্সজিস্টস () পদ্ধতিগুলির জন্য কি আরও ভাল প্যাটার্ন রয়েছে?