Ana içeriğe atla

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

Yorumlar

Bu blogdaki popüler yayınlar

Vue.js, Vuetify, Typescript ve Jest ile unit test yazmak

Vue.js, Vuetify, Typescript ve Jest ile unit test yazmak Writing unit test with Vue.js, Vuetify, Typescript and Jest
Geliştirmekte olduğumuz proje kapsamında Vue.js, Vuetify ve Typescript ile çalışmaktayız. Burada unit test yazmak istediğimizde biraz araştırma yapmak, ve çıkan problemlerle boğuşmak zorunda kaldık. Bu yazıda bulduğumuz çözümler ile konuyu anlatmak istiyorum :
Öncelikle unit test aracı olarak jest kullanmaya karar verdik. Vue.js Cli tarafından öncelik Mocka'ya verilmiş olsada bizim projemizde onu açlıştırmak hiç kolay olmadı. Sıkıntı typescript kullanmamızdan kaynaklanmakta. bu iş için kullanacağımız araçların hepsi typescript destekli değil maalesef. Gelelim adımlara :
1. npm ile bazı paketleri projemize eklememiz lazım :
npm i -D jest@23.6.0 jsdom@13.2.0 jsdom-global@3.0.2 ts-jest@23.10.5 @vue/test-utils @vue/cli-plugin-unit-jest @vue/cli-plugin-typescript

Burada önemli nokta jest sürümünün 23'de kalması. Çünkü ts-jest şu anda (11.02.2019 itibari ile) sadece je…

MongoDB'yi Çalıştırmak

MongoDB'yi development makinamıza kurduktan sonra (kurulumu şu makalemde görebilirsiniz), artık onunla çalışmamız lazım. Ancak bunun için öncelikle mongo db 'nin çalışır hale gelmesi gerekiyor. Bu işlem 2 şekilde olabilir.
1. ihtiyaç olduğunda mongodb'yi elle çalıştırabilirsiniz
2. mongodb yi windows servis olarak çalıştırıp, bilgisayar her çalıştığında otomatik olarak çalışmasını sağlayabilirsiniz.

Öncelikle mongodb'yi command prompt'dan çalıştırabilmek için bir ayar yapmamız lazım. Bunun için önceki makaleme bakabilirsiniz : http://www.alperkonuralp.com/2016/10/mongodbyi-command-prompttan-calstrmak.html

Şimdide MongoDB'nin veri tabanı dosyalarını depolayabilmesi için gerekli olan dizinleri oluşturalım.
1. Command Prompt açılır. ( bunun için start tuşunda cmd yazıp enter'e basmanız yeterli olacaktır. Ancak yönetici yetkileri ile açmak daha iyi olacağı için cmd yazdığınızda görünen programa sağ tıklayıp yönetici olarak aç seçeneği ile açmanız daha iyi olaca…

Vuejs ve Typescript konuları

Son zamanlarda projelerimizde Vuejs ve typescript kullanıyoruz. Bu iki dünya ile ilgili olarak karşılaştığımız problemlerini ve çözümlerini elimden geldiğince burada paylaşmaya çalışacağım.