ASP.NET’in kendi içerisindeki kullanıcı yönetimi mimarisini kullanarak Membership, Roles, Profiles gibi önceden hazırlanmış tabloları, view’leri ve stored procedure’ları kullanabilirsiniz. Bu sayede hem database tarafında hem de framework tarafında binlerce satır kod yazmaktan kurtulmış olacağınız gibi kodların tekrar kullanılabilirliği sayesinde kendinize boilerplate kod şabllonları da yaratabilirsiniz.
Bu giriş açıklamasını yazmam gerekiyordu çünkü The 'System.Web.Security.SqlMembershipProvider' requires a database schema compatible with schema version '1'. However, the current database schema is not compatible with this version. You may need to either install a compatible schema with aspnet_regsql.exe (available in the framework installation directory), or upgrade the provider to a newer version. hatası da bu kullanıcı yönetimi sisteminin klonlanmasından kaynaklanmaktadır ve veritabanı schema’sının eksik ya da hatalı olduğunu gösteriyordur.
Stack trace bilgilerine bakarak da aynı mesaj görüntülenebilir. Çözümü oldukça kolay olmakla birlikte kısa ve uzun çözüm yolları şu şekildedir:
The 'System.Web.Security.SqlMembershipProvider' requires a database schema compatible with schema version '1' Hatası Çözümü
Uzun Çözüm
aspnet_regsql.exe dosyası tekrar çalıştırılarak SqlMembershipProvider tabloları, view’leri ve saklı yordamları sıfırdan kurulabilir. aspnet_regsql.exe dosyasına şu yoldan erişilebilir:
C:\Windows\Microsoft.NET\Framework[framework sürümü]\aspnet_regsql
Aspnet_regsql.exe dosyası çalıştırıldığında veritabanı erişim (sunucu ip adresi, kullanıcı adı, parola ve veritabanı adı) bilgilerini isteyecektir. Bu bilgileri girmeden önce bu veritabanında daha önce başka bir SqlMembershipProvider kurulmadığına emin olunmasında fayda var. Tercihen yeni ve temiz bir database açılarak bu işlemin sıfırdan yapılması daha sağlıklı olacaktır.
Kolay Çözüm
Hata, Asp.net üyelik sistemi başka bir veritabanından Tasks-> Generate Scripts işlemi yapılarak kopyalandığında aspnet_SchemaVersions tablosunun boş olmasından kaynaklanmaktadır.
Çözüm olarak SchemaVersions tablosuna ilgili değerleri kayıtları gerekmektedir:
INSERT INTO dbo.aspnet_SchemaVersions
VALUES
('common', 1, 1),
('health monitoring', 1, 1),
('membership', 1, 1),
('personalization', 1, 1),
('profile', 1, 1),
('role manager', 1, 1);
GO
Kayıtlar eklendikten sonra proje rebuild edildiğinde hatanın giderilmiş olduğu görülecektir.