Ma’lumotlar bazasi kontekst klassini yaratish. Keyingi qadam AppUser bilan ishlaydigan Entity Framework uchun ma’lumotlar bazasi kontekstini yaratishdir. Code-First yondashuv bilan ishlashda bu odatiy amaliyotdir – ma’lumotlar bazasini yaratish va boshqarish, ma’lumotlarga murojaatni ta’minlash uchun C # klasslarini aniqlaymiz. Kontekst klassi IdentityDbContext – dan voris bo‘lishi kerak, bu erda T – foydalanuvchini tavsiflaydigan klass (bizning holatlarimizda AppUser). Loyihada Infrastructure papkasini yarating va AppIdentityDbContext.cs deb nomlangan klass faylini qo‘shing, uning kodi quyidagi misolda ko‘rsatilgan:
using Users.Models;
using System.Data.Entity;
using Microsoft.AspNet.Identity.EntityFramework;
namespace Users.Infrastructure
{
public class AppIdentityDbContext : IdentityDbContext {
public AppIdentityDbContext() : base("name=IdentityDb") { }
static AppIdentityDbContext()
{
Database.SetInitializer(new IdentityDbInit());
}
public static AppIdentityDbContext Create()
{
return new AppIdentityDbContext();
}
}
public class IdentityDbInit
: DropCreateDatabaseIfModelChanges {
protected override void Seed(AppIdentityDbContext context)
{
PerformInitialSetup(context);
base.Seed(context);
}
public void PerformInitialSetup(AppIdentityDbContext context)
{
// sozlamalar shu yerda sozlanadi
}
}
}
Misoldagi AppIdentityDbContext klassi uchun konstruktor, Web.config fayliga oldin aniqlangan ma’lumotlar bazasiga ulanish satri nomini qabul qiladi.
Foydalanuvchilarni boshqarish klassini yaratish. Identity da eng muhim klasslardan biri bu foydalanuvchilarni boshqarish klassidir, ushbu klass UserManager dan voris olinib yaratilishi kerak, bu yerda T – foydalanuvchini anglatadigan klass. UserManager klassi Entity Framework ning bir qismi emas, u foydalanuvchi ma’lumotlarini yaratish va foydalanishning umumiy xususiyatlarini tavsiflaydi. Quyidagi jadvalda UserManager klassining asosiy metodlari va xossalari ko‘rsatilgan. Jadvalda qayd etilmagan bu klassning yana bir nechta a’zolari bor.
Nomi
Tavsifi
ChangePasswordAsync(id, old, new)
Foydalanuvchining parolini o‘zgartirish
CreateAsync(user)
Foydalanuvchini yaratish
CreateAsync(user, pass)
Foydalanuvchini parole bilan birga yaratish
DeleteAsync(user)
Foydalanuvchini o‘chirish
FindAsync(user, pass)
Foydalanuvchini login va parole bo‘yicha qidirish
FindByIdAsync(id)
Foydalanuvchi Id si bo‘yicha qidirish
FindByNameAsync(name)
Foydalanuvchini nomi bo‘yicha qidirish
UpdateAsync(user)
Foydalanuvchi ma’lumotlarini yangilash
Users
Foydalanuvchilar ro‘yxatini qaytarish xossasi
Shunday qilib, AppUserManager.cs klass faylini loyihaning Infrastructure papkasiga quyidagi tarkib bilan qo‘shing:
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.Owin;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Users.Models;
namespace Users.Infrastructure
{
public class AppUserManager : UserManager {
public AppUserManager(IUserStore store)
: base(store)
{ }
public static AppUserManager Create(IdentityFactoryOptions options,
IOwinContext context)
{
AppIdentityDbContext db = context.Get();
AppUserManager manager = new AppUserManager(new UserStore(db));
return manager;
}
}
}
Statik Create() metodi Identity ning foydalanuvchi ma’lumotlari bilan ishlashiga zaruriyati tug‘ilganida AppUserManager klassining obyektini yaratadi.
AppUserManager klassini ishga tushirish uchun UserStore obyekti kerak. UserStore klassi Entity Frameworkdagi IUserStore interfeysini realizasiya qiladi, unda ma’lumotlar bazasi bilan ishlash uchun CRUD metodlarini (yaratish/o‘qish/yangilash/o‘chirish) aniqlangan. UserStore -ni yaratish uchun OWIN orqali olinadigan AppIdentityDbContext klassining obyekti kerak:
//...
AppIdentityDbContext db = context.Get();
//...
OWIN ni ishga tushirish klassini yaratish. Identity kutubxonasini sozlash uchun kerak bo‘ladigan oxirgi amal bu OWIN-ni ishga tushirish klassini yaratishdir. Oldin Web.config faylida OWIN-ni ishga tushirish klassini nomiga ishora qiladigan dastur parametrini aniqlagan edik: