12 Mart 2014 Çarşamba

Sqlite için MVC 5 Identity DB Scripti

Merhabalar, Microsoft harici teknolojilere ve projelere ilgimi herkes bilir. Özelliklede birçok projede bazen başlangıç aşamasında bazende projenin tamamında sql server harici veri tabanları kullanırım. En sık kullandığım ise Sqlite'dır. Stabil, küçük ve dll'ini sisteme eklemekten başka bir şeye ihtiyaç duymayan herhangi bir kurulum yapmanız gerekmeyen süper bir db motoru bu arkadaş. Özellikle nhibernate ile create table script'leri dahi yazmadan code first mimarisi ile çok rahat çalışabiliyor. Ancak problem microsoft'un gelişmesi için 10 yıl gereken entity framework aracında başlıyor. Sadece microsoft teknolojilerini doğal olarak destekleyen bu araç diğer yapılara "İsterseniz bana provider yazıp kendinizi ekleyebilirsiniz" mantığında. böylede olunca gözümdeki beş para etmez bir hale geliyor. ancak kendim kullanmayacak olsamda bazı yerlerde microsoft bir işe yarayacakmış gibi bu arkadaşın kullanımını zorunlu kılıyor. uzun lafın kısası 1. Entity Framework'ten hoşlanmadığımı anlamışsınızdır. Kullanmamanızı tavsiye ederim. NHibernate bu konuda bence en iyi araç. 2. Gelelim asıl konumuza eğerki mvc 5 ile yeni gelen Asp.Net Identity altyapısını kullanmak istiyorsanız ve bu konudaki http://www.asp.net/identity/overview/getting-started/introduction-to-aspnet-identity adresi ve benzeri adreslerdeki yazıları okuduysanız, hemen klavye başına geçip sqlite ile bu arkadaşı test etmeye kalkabilirsiniz. Ama maalesef bu konuda başarılı olamayabilirsiniz. Çünkü code first ile database'i generate ettiğini söyleyen entity framework provider yok gibi abuk bir hata vermekte. O zaman elinize baltayı alma zamanı gelmiştir. Bende tam öyle yaptım ve aşağıdaki script'i hazırladım. Bu script ile veri tabanınızı hazırlayıp sonrada bunun üzerinden Asp.Net Identity altyapısını kullanabilirsiniz.


CREATE TABLE [AspNetRoles] (
    [Id]   NVARCHAR (128) NOT NULL,
    [Name] NTEXT NOT NULL,
    CONSTRAINT [PK_AspNetRoles] PRIMARY KEY ([Id] ASC)
);


CREATE TABLE [AspNetUserClaims] (
    [Id]         INT            IDENTITY (1, 1) NOT NULL,
    [ClaimType]  NText NULL,
    [ClaimValue] NTEXT NULL,
    [User_Id]    NVARCHAR (128) NOT NULL,
    CONSTRAINT [PK_dbo.AspNetUserClaims] PRIMARY KEY  ([Id] ASC),
    CONSTRAINT [FK_dbo.AspNetUserClaims_dbo.AspNetUsers_User_Id] FOREIGN KEY ([User_Id]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE
);

CREATE INDEX [IX_AspNetUserClaims_User_Id]
    ON [AspNetUserClaims]([User_Id] ASC);


CREATE TABLE [AspNetUserLogins] (
    [UserId]        NVARCHAR (128) NOT NULL,
    [LoginProvider] NVARCHAR (128) NOT NULL,
    [ProviderKey]   NVARCHAR (128) NOT NULL,
    CONSTRAINT [PK_AspNetUserLogins] PRIMARY KEY ([UserId] ASC, [LoginProvider] ASC, [ProviderKey] ASC),
    CONSTRAINT [FK_AspNetUserLogins_dbo.AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE
);

CREATE INDEX [IX_UserId]
    ON [AspNetUserLogins]([UserId] ASC);


CREATE TABLE [AspNetUserRoles] (
    [UserId] NVARCHAR (128) NOT NULL,
    [RoleId] NVARCHAR (128) NOT NULL,
    CONSTRAINT [PK_dbo.AspNetUserRoles] PRIMARY KEY  ([UserId] ASC, [RoleId] ASC),
    CONSTRAINT [FK_dbo.AspNetUserRoles_dbo.AspNetRoles_RoleId] FOREIGN KEY ([RoleId]) REFERENCES [AspNetRoles] ([Id]) ON DELETE CASCADE,
    CONSTRAINT [FK_dbo.AspNetUserRoles_dbo.AspNetUsers_UserId] FOREIGN KEY ([UserId]) REFERENCES [AspNetUsers] ([Id]) ON DELETE CASCADE
);

CREATE INDEX [IX_RoleId]
    ON [AspNetUserRoles]([RoleId] ASC);

CREATE INDEX [IX_AspNetUserRoles_UserId]
    ON [AspNetUserRoles]([UserId] ASC);


CREATE TABLE [AspNetUsers] (
    [Id]            NVARCHAR (128) NOT NULL,
    [UserName]      NTEXT NULL,
    [PasswordHash]  NTEXT NULL,
    [SecurityStamp] NTEXT NULL,
    [Discriminator] NVARCHAR (128) NOT NULL,
    CONSTRAINT [PK_AspNetUsers] PRIMARY KEY ([Id] ASC)
);


CREATE TABLE [__MigrationHistory] (
  [MigrationId] NVARCHAR(150) NOT NULL, 
  [ContextKey] nvARCHAR(300) NOT NULL, 
  [Model] NTEXT NOT NULL, 
  [ProductVersion] nvARCHAR(32) NOT NULL, 
  CONSTRAINT [] PRIMARY KEY ([MigrationId] ASC, [ContextKey] ASC)
);


örnek projeyi şu adresten inceleyebilirsiniz: https://github.com/alperkonuralp/AspNetMvc5WithSqlite
Yorum Gönder