Veysel Uğur KIZMAZ

Asp.Net MVC 5 Kitabı - Öğrenci Bilgi Sistemi Projesinin Veritabanını Oluşturma

19.07.2014Okunma Sayısı: 27907Kategori: ASP.NET MVC

Asp.Net MVC 5 kitabıma eklediğim Öğrenci Bilgi Sistemi projesinin nasıl çalıştırılacağına dair sorularla karşılaştım. Entity Framework Code-First konusunda biraz araştırma yapan arkadaşlar projeyi başarıyla çalıştırdıklarını belirttiler. E-posta gönderen arkadaşlar için bu makaleyi hazırladım.

OBS.MVC projesinde 2 tane Context sınıfı vardır: OBSContext ve OBSIdentityContext. Bu 2 sınıfı da veritabanı üzerinde oluşturmanız gerekmektedir. Bu işlem için aşağıdaki adımları Package Manager Console (bundan sonra “komut satırı” diye geçecek) üzerinde sırasıyla gerçekleştiriniz.

1. İlk adımda OBSContext sınıfını oluşturacağız. OBSContext sınıfının migration özelliğini açmanız gerekmektedir. Bunun için komut satırına aşağıdaki kodu yazınız.

Enable-Migrations –ContextType OBSContext

Bu komutu yazıp çalıştırdığınızda “Code First Migrations enabled” mesajını alacaksınız ve projenizde Migration isimli bir dizin oluşacak. Dizinin içinde OBSContext sınıfının migration ayarlarının tutulduğu Configuration.cs sınıfı bulunacaktır.

2. Oluşan Configuration.cs sınıfının adını OBSContextConfiguration.cs olarak değiştiriniz. Ardından OBSContextConfiguration sınıfının constructorında bulunan AutomaticMigrationsEnabled özelliğini true olarak değiştiriniz.

3. OBSContext ‘in tabloları için Create scriptini (OBSContextInitialCreate sınıfını) oluşturalım. Bu işlem için komut satırına aşağıdaki komutu yazınız.

Add-Migration OBSContextInitialCreate -ConfigurationTypeName OBSContextConfiguration

Komutu çalıştırdığınızda OBSContextInitialCreate sınıfını, sınıf isminin başında günün tarihi yazacak şekilde oluşturur. İçinde de migration veritabanını ve tabloları oluşturma kodları bulunmaktadır.

namespace OBS.MVC.Migrations
{
    using System;
    using System.Data.Entity.Migrations;
    
    public partial class OBSContextInitialCreate : DbMigration
    {
        public override void Up()
        {
            CreateTable(
                "dbo.Bolum",
                c => new
                    {
                        Id = c.Int(nullable: false, identity: true),
                        Ad = c.String(nullable: false),
                        Adres = c.String(nullable: false),
                        Kod = c.String(nullable: false, maxLength: 3),
                        FakulteId = c.Int(nullable: false),
                    })
                .PrimaryKey(t => t.Id)
                .ForeignKey("dbo.Fakulte", t => t.FakulteId)
                .Index(t => t.FakulteId);
            
            CreateTable(
                "dbo.Ders",
                c => new
                    {
                        Id = c.Int(nullable: false, identity: true),
                        Ad = c.String(nullable: false),
                        Kod = c.String(nullable: false, maxLength: 3),
                        BolumId = c.Int(nullable: false),
                    })
                .PrimaryKey(t => t.Id)
                .ForeignKey("dbo.Bolum", t => t.BolumId)
                .Index(t => t.BolumId);
            
            CreateTable(
                "dbo.DonemDers",
                c => new
                    {
                        Id = c.Int(nullable: false, identity: true),
                        DonemId = c.Int(nullable: false),
                        DersId = c.Int(nullable: false),
                        OgretimGorevlisiId = c.Int(nullable: false),
                    })
                .PrimaryKey(t => t.Id)
                .ForeignKey("dbo.Ders", t => t.DersId)
                .ForeignKey("dbo.Donem", t => t.DonemId)
                .ForeignKey("dbo.OgretimGorevlisi", t => t.OgretimGorevlisiId)
                .Index(t => t.DonemId)
                .Index(t => t.DersId)
                .Index(t => t.OgretimGorevlisiId);
            
            CreateTable(
                "dbo.Donem",
                c => new
                    {
                        Id = c.Int(nullable: false, identity: true),
                        Yil = c.Int(nullable: false),
                        DonemTip = c.Int(nullable: false),
                    })
                .PrimaryKey(t => t.Id);
            
            CreateTable(
                "dbo.OgrenciDonemDers",
                c => new
                    {
                        Id = c.Int(nullable: false, identity: true),
                        DonemDersId = c.Int(nullable: false),
                        OgrenciId = c.Int(nullable: false),
                        Vize1 = c.Int(nullable: false),
                        Vize2 = c.Int(nullable: false),
                        Final = c.Int(nullable: false),
                        Ortalama = c.Int(nullable: false),
                        BasariDurumTip = c.Int(nullable: false),
                    })
                .PrimaryKey(t => t.Id)
                .ForeignKey("dbo.DonemDers", t => t.DonemDersId)
                .ForeignKey("dbo.Ogrenci", t => t.OgrenciId)
                .Index(t => t.DonemDersId)
                .Index(t => t.OgrenciId);
            
            CreateTable(
                "dbo.Ogrenci",
                c => new
                    {
                        Id = c.Int(nullable: false, identity: true),
                        Ad = c.String(nullable: false),
                        Soyad = c.String(nullable: false),
                        KimlikNo = c.String(nullable: false, maxLength: 11),
                        EPosta = c.String(nullable: false),
                        DogumTarih = c.DateTime(nullable: false),
                        GirisTarih = c.DateTime(nullable: false),
                        CikisTarih = c.DateTime(nullable: false),
                        BolumId = c.Int(nullable: false),
                    })
                .PrimaryKey(t => t.Id)
                .ForeignKey("dbo.Bolum", t => t.BolumId)
                .Index(t => t.BolumId);
            
            CreateTable(
                "dbo.OgretimGorevlisi",
                c => new
                    {
                        Id = c.Int(nullable: false, identity: true),
                        Ad = c.String(nullable: false),
                        Soyad = c.String(nullable: false),
                        KimlikNo = c.String(nullable: false, maxLength: 11),
                        EPosta = c.String(nullable: false),
                        DogumTarih = c.DateTime(nullable: false),
                        GirisTarih = c.DateTime(nullable: false),
                        CikisTarih = c.DateTime(nullable: false),
                        BolumId = c.Int(nullable: false),
                    })
                .PrimaryKey(t => t.Id)
                .ForeignKey("dbo.Bolum", t => t.BolumId)
                .Index(t => t.BolumId);
            
            CreateTable(
                "dbo.Fakulte",
                c => new
                    {
                        Id = c.Int(nullable: false, identity: true),
                        Ad = c.String(nullable: false),
                        Adres = c.String(nullable: false),
                    })
                .PrimaryKey(t => t.Id);
            
        }
        
        public override void Down()
        {
            DropForeignKey("dbo.Bolum", "FakulteId", "dbo.Fakulte");
            DropForeignKey("dbo.DonemDers", "OgretimGorevlisiId", "dbo.OgretimGorevlisi");
            DropForeignKey("dbo.OgretimGorevlisi", "BolumId", "dbo.Bolum");
            DropForeignKey("dbo.OgrenciDonemDers", "OgrenciId", "dbo.Ogrenci");
            DropForeignKey("dbo.Ogrenci", "BolumId", "dbo.Bolum");
            DropForeignKey("dbo.OgrenciDonemDers", "DonemDersId", "dbo.DonemDers");
            DropForeignKey("dbo.DonemDers", "DonemId", "dbo.Donem");
            DropForeignKey("dbo.DonemDers", "DersId", "dbo.Ders");
            DropForeignKey("dbo.Ders", "BolumId", "dbo.Bolum");
            DropIndex("dbo.OgretimGorevlisi", new[] { "BolumId" });
            DropIndex("dbo.Ogrenci", new[] { "BolumId" });
            DropIndex("dbo.OgrenciDonemDers", new[] { "OgrenciId" });
            DropIndex("dbo.OgrenciDonemDers", new[] { "DonemDersId" });
            DropIndex("dbo.DonemDers", new[] { "OgretimGorevlisiId" });
            DropIndex("dbo.DonemDers", new[] { "DersId" });
            DropIndex("dbo.DonemDers", new[] { "DonemId" });
            DropIndex("dbo.Ders", new[] { "BolumId" });
            DropIndex("dbo.Bolum", new[] { "FakulteId" });
            DropTable("dbo.Fakulte");
            DropTable("dbo.OgretimGorevlisi");
            DropTable("dbo.Ogrenci");
            DropTable("dbo.OgrenciDonemDers");
            DropTable("dbo.Donem");
            DropTable("dbo.DonemDers");
            DropTable("dbo.Ders");
            DropTable("dbo.Bolum");
        }
    }
}

 

4. Veritabanı oluşturma kodları hazırlandıktan sonra artık veritabanını oluşturabilirsiniz. Bunun için aşağıdaki komutları yazınız.

Update-Database -ConfigurationTypeName OBSContextConfiguration –Verbose

Komutu çalıştırdığınızda açıklama satırları (yapılan işlemler) aşağıdaki gibi olacak ve veritabanı oluşacaktır.

PM> Update-Database -ConfigurationTypeName OBSContextConfiguration -Verbose
Using StartUp project 'OBS.MVC'.
Using NuGet project 'OBS.MVC'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'OBS' (DataSource: .\SQL2014, Provider: System.Data.SqlClient, Origin: Configuration).
Applying explicit migrations: [201407192023228_OBSContextInitialCreate].
Applying explicit migration: 201407192023228_OBSContextInitialCreate.
CREATE TABLE [dbo].[Bolum] (
    [Id] [int] NOT NULL IDENTITY,
    [Ad] [nvarchar](max) NOT NULL,
    [Adres] [nvarchar](max) NOT NULL,
    [Kod] [nvarchar](3) NOT NULL,
    [FakulteId] [int] NOT NULL,
    CONSTRAINT [PK_dbo.Bolum] PRIMARY KEY ([Id])
)
CREATE INDEX [IX_FakulteId] ON [dbo].[Bolum]([FakulteId])
CREATE TABLE [dbo].[Ders] (
    [Id] [int] NOT NULL IDENTITY,
    [Ad] [nvarchar](max) NOT NULL,
    [Kod] [nvarchar](3) NOT NULL,
    [BolumId] [int] NOT NULL,
    CONSTRAINT [PK_dbo.Ders] PRIMARY KEY ([Id])
)
CREATE INDEX [IX_BolumId] ON [dbo].[Ders]([BolumId])
CREATE TABLE [dbo].[DonemDers] (
    [Id] [int] NOT NULL IDENTITY,
    [DonemId] [int] NOT NULL,
    [DersId] [int] NOT NULL,
    [OgretimGorevlisiId] [int] NOT NULL,
    CONSTRAINT [PK_dbo.DonemDers] PRIMARY KEY ([Id])
)
CREATE INDEX [IX_DonemId] ON [dbo].[DonemDers]([DonemId])
CREATE INDEX [IX_DersId] ON [dbo].[DonemDers]([DersId])
CREATE INDEX [IX_OgretimGorevlisiId] ON [dbo].[DonemDers]([OgretimGorevlisiId])
CREATE TABLE [dbo].[Donem] (
    [Id] [int] NOT NULL IDENTITY,
    [Yil] [int] NOT NULL,
    [DonemTip] [int] NOT NULL,
    CONSTRAINT [PK_dbo.Donem] PRIMARY KEY ([Id])
)
CREATE TABLE [dbo].[OgrenciDonemDers] (
    [Id] [int] NOT NULL IDENTITY,
    [DonemDersId] [int] NOT NULL,
    [OgrenciId] [int] NOT NULL,
    [Vize1] [int] NOT NULL,
    [Vize2] [int] NOT NULL,
    [Final] [int] NOT NULL,
    [Ortalama] [int] NOT NULL,
    [BasariDurumTip] [int] NOT NULL,
    CONSTRAINT [PK_dbo.OgrenciDonemDers] PRIMARY KEY ([Id])
)
CREATE INDEX [IX_DonemDersId] ON [dbo].[OgrenciDonemDers]([DonemDersId])
CREATE INDEX [IX_OgrenciId] ON [dbo].[OgrenciDonemDers]([OgrenciId])
CREATE TABLE [dbo].[Ogrenci] (
    [Id] [int] NOT NULL IDENTITY,
    [Ad] [nvarchar](max) NOT NULL,
    [Soyad] [nvarchar](max) NOT NULL,
    [KimlikNo] [nvarchar](11) NOT NULL,
    [EPosta] [nvarchar](max) NOT NULL,
    [DogumTarih] [datetime] NOT NULL,
    [GirisTarih] [datetime] NOT NULL,
    [CikisTarih] [datetime] NOT NULL,
    [BolumId] [int] NOT NULL,
    CONSTRAINT [PK_dbo.Ogrenci] PRIMARY KEY ([Id])
)
CREATE INDEX [IX_BolumId] ON [dbo].[Ogrenci]([BolumId])
CREATE TABLE [dbo].[OgretimGorevlisi] (
    [Id] [int] NOT NULL IDENTITY,
    [Ad] [nvarchar](max) NOT NULL,
    [Soyad] [nvarchar](max) NOT NULL,
    [KimlikNo] [nvarchar](11) NOT NULL,
    [EPosta] [nvarchar](max) NOT NULL,
    [DogumTarih] [datetime] NOT NULL,
    [GirisTarih] [datetime] NOT NULL,
    [CikisTarih] [datetime] NOT NULL,
    [BolumId] [int] NOT NULL,
    CONSTRAINT [PK_dbo.OgretimGorevlisi] PRIMARY KEY ([Id])
)
CREATE INDEX [IX_BolumId] ON [dbo].[OgretimGorevlisi]([BolumId])
CREATE TABLE [dbo].[Fakulte] (
    [Id] [int] NOT NULL IDENTITY,
    [Ad] [nvarchar](max) NOT NULL,
    [Adres] [nvarchar](max) NOT NULL,
    CONSTRAINT [PK_dbo.Fakulte] PRIMARY KEY ([Id])
)
ALTER TABLE [dbo].[Bolum] ADD CONSTRAINT [FK_dbo.Bolum_dbo.Fakulte_FakulteId] FOREIGN KEY ([FakulteId]) REFERENCES [dbo].[Fakulte] ([Id])
ALTER TABLE [dbo].[Ders] ADD CONSTRAINT [FK_dbo.Ders_dbo.Bolum_BolumId] FOREIGN KEY ([BolumId]) REFERENCES [dbo].[Bolum] ([Id])
ALTER TABLE [dbo].[DonemDers] ADD CONSTRAINT [FK_dbo.DonemDers_dbo.Ders_DersId] FOREIGN KEY ([DersId]) REFERENCES [dbo].[Ders] ([Id])
ALTER TABLE [dbo].[DonemDers] ADD CONSTRAINT [FK_dbo.DonemDers_dbo.Donem_DonemId] FOREIGN KEY ([DonemId]) REFERENCES [dbo].[Donem] ([Id])
ALTER TABLE [dbo].[DonemDers] ADD CONSTRAINT [FK_dbo.DonemDers_dbo.OgretimGorevlisi_OgretimGorevlisiId] FOREIGN KEY ([OgretimGorevlisiId]) REFERENCES [dbo].[OgretimGorevlisi] ([Id])
ALTER TABLE [dbo].[OgrenciDonemDers] ADD CONSTRAINT [FK_dbo.OgrenciDonemDers_dbo.DonemDers_DonemDersId] FOREIGN KEY ([DonemDersId]) REFERENCES [dbo].[DonemDers] ([Id])
ALTER TABLE [dbo].[OgrenciDonemDers] ADD CONSTRAINT [FK_dbo.OgrenciDonemDers_dbo.Ogrenci_OgrenciId] FOREIGN KEY ([OgrenciId]) REFERENCES [dbo].[Ogrenci] ([Id])
ALTER TABLE [dbo].[Ogrenci] ADD CONSTRAINT [FK_dbo.Ogrenci_dbo.Bolum_BolumId] FOREIGN KEY ([BolumId]) REFERENCES [dbo].[Bolum] ([Id])
ALTER TABLE [dbo].[OgretimGorevlisi] ADD CONSTRAINT [FK_dbo.OgretimGorevlisi_dbo.Bolum_BolumId] FOREIGN KEY ([BolumId]) REFERENCES [dbo].[Bolum] ([Id])
CREATE TABLE [dbo].[__MigrationHistory] (
    [MigrationId] [nvarchar](150) NOT NULL,
    [ContextKey] [nvarchar](300) NOT NULL,
    [Model] [varbinary](max) NOT NULL,
    [ProductVersion] [nvarchar](32) NOT NULL,
    CONSTRAINT [PK_dbo.__MigrationHistory] PRIMARY KEY ([MigrationId], [ContextKey])
)
INSERT [dbo].[__MigrationHistory]([MigrationId], [ContextKey], [Model], [ProductVersion])
VALUES (N'201407192023228_OBSContextInitialCreate', N'OBS.MVC.Migrations.OBSContextConfiguration',  0x1F8B0800000000000400ED5DCB6E23B915DD07987F28D42A093C92EDDE248634035BB61BC68CED86E56E242B83966899E87A2855946167305F96453E29BF10D69BEF22EB25D923F4A6C5220FC9CB732FC94BF2FA7FFFF9EFE4E757DF735E6014A33098BA47A343D781C1225CA260357537F8E9C7BFB93FFFF4C39F26174BFFD5F956E4FB94E423258378EA3E63BC3E198FE3C533F4413CF2D1220AE3F0098F16A13F06CB707C7C78F8F7F1D1D1181208976039CEE46E1360E4C3F407F9390B83055CE30DF0AEC325F4E23C9D7C99A7A8CE0DF061BC060B38756FCFE6A3EB6FB3D11D5C8731C2618460EC3AA71E02A42D73E83DB90E088210034C5A7AF23586731C85C16ABE2609C0BB7F5B4392EF097831CC7B70526537EDCCE171D2997155B0805A6C621CFA9680479F72E98CF9E28D64EC96D223F2BB2072C66F49AF53194EDDB3D0DBF8AEC3D77432F3A2245725DF6C244669FE03274F3D2829409892FC3B70661B0F6F22380DE00647C03B70BE6C1E3DB4F805BEDD87DF61300D369E473789348A7C631248D297285CC308BFDDC1A7BCA1574BD719B3E5C67CC1B2185526EBC555803F1DBBCE0DA91C3C7AB01C71AAC773C21DF819063002182EBF008C61142418309599503B57D76959172118D116D7B906AFBFC260859FA72EF9AFEB5CA257B82C52F2FABF068828172984A30D94B4AFAECE2821FBD0D5FE12EAFAFAA98F2A2FC177C22B583FA01CCC0D7841AB747C39C073C25B0F46AE7307BDF47BFC8CD699C11825DF1E72C5B88C42FF2EF4F21259EAC33D88561093A684C2A779B8891616EDC83B266D47FE2D434E1B5BB586FF26B449C860DBB2DB55442C3F520929FF2CCA89F920348BFD2A6BD3645C1929ADE94AA46E61B992EC7BC3B51B866B0B1624255C77F623A77D13EB51905E623D0A6D31B66261007DAD292B323C64DA423588F9229A34F6733B452DB06CB4B528B35759B1AE5438D65C96CC806D31126B4E16EE9F496F5E3C14A36EE7E7768C16D44C4E782B5553B7E8815545AE55CC57B9AEB1591A4ED6B5F680CFF740E9A630854B72A9E67359D6267DA0C9A4EC009D4929776D466937D4B9DB5B3F5BCBB7B77A625DFF445E4B8B9748F61EAD3BB35146B3AF8D6590DA2C39731B7191D7560B5AF245F70C5510ACAB799508BB2DCC37F46F78D41EE2B81DC4250A404BCDBD8D30F0800FDAA19C811844E87C136D7AB102FD4CB8BC4930989B2D170DDAEDBD7461216EF625D9945B7F59DE56336CD90F5B63B6B761BBE10E98876F601B5E08E47BE8FB4DA8A9F9E8A88F8A2FBE843106C377F83C5C11D3476CE07351F739E1C83DF2EDA13EA308C5DD40CDD0F7AEA00673F2187A3F15C6BBA1B7C77293D7C676AB1AAEB3F38D6D37BBE9B332E274D1BD35DF5BF3BD35DF5BF366D69CF1FE48CDBA98436A2625D93A77EB77E405AB6D7E7776BE3CE73436EF7989BD55DF0DAB3ED45D03BDFAAA14C2EAA89CA7BDF22CDD84E9A7711C2E50DA1EEAE822B7206CD72E82A5A33E0DCC045B9C2012D99236A135A133A974EAFE55109414ADDC735768B92D63E18E0438C27E1825F403DE8C8896E8130AB0A82A88ACFED6C053D6CC953054AF44BC2536FFE51CAE619068865278269596938958735901A7F27522998CA9C1AFE1047B6AA51C49C51116C58DCA7D644110C559AF9E725D71445AF9103C910AD3A4E2C285BB3DAAB013BA765C15533A4799FAC1D5C2CA2863CEC4E6BC91766E28EE484560C49FE27C7E2B04D2B89C55236EE27FAE465E3C453237452647CB061CEBC836D5B76600AED50BDF98735B355CAC4FAC8600EAD54FE9CDB726D576D640D2CA87A3CD7B5B09E99C9375E3ABF554D6324837E5199D63B5B180ADA8A5E9F78044D3C8C6A415D499F6D6882771F2E818A1F3F8B064605DD876964BE3301AD084A95B3110C5D4C27E1F464DED8F331E7C13C3A6635A9D8533B80F37DCFADEA8F7DBE05E1B03C75F86DD0A1B0567988A136ACF584583D2716B4E35F5DB941A73D611B354DD1A804CAAAE9B544DBD711A803699379394C1A4048C0A0E9FCD9324F88A259EFAAF31CC9DF571EECDE5199040CE21163CB695EB941D7E81422C4079A02194CFEC525D71E65044C4A80C9C099006A416407A122F6089AB4A33582D9A114865B608165280B1334F0D6A4E6679D34A9BC28150546549501CC85119C4D736BCCE68DDED657B2996095AA775B1530815D1F95323B64726BDE59E37487AAC71259B3893E99E337CD4755FEE40AE1762530970079A0A29689659A67E525E1A469290AF9D0C05DB4024BA4BA4A2684CFD7FB61E40AA7F527BA6919A81D7AF77E9A96D88C67165E0BA12C562288D41EC89F62E985A14B5DE196BFF4C7331E97C32769C6C283FD9D510B9E8EAFC0B361E06AE6BFC145D23388D53A13FA269AEA418C8CB826CF5BBE60EA537B0B117AF3288B2D3EFF0CCF678540FE8C59A4632CA7D5D3B4615372BCABD48F96D32CEE2BDE40993B12230CCE41AACD72858518162F214679E458999FD38B70F9EE26718E3053371F23BA7B2261C466005B9AFA46AD2D24B14C5F81C60F008922B2FB3A52F64A3765E8A95755111B7B912C7AB586D170592FF97DB3B2158CE486AA72A115E925EF9C90E37BDB4C40FB558CE49A2F4000F44920B52B3A448A0DE69AB4B9F72A54F2D4BA79797588034C91C238D594023A409E6E5A9ED3D8DA2D9F5278CE70641F00B08A3CD691DCF1E236EA98DB025B5648B4E0366C98BED22B1DA92A2745BD3184A5FF6F608A19F9A6D59A1DA8F9850435DB61F7E9477396808E5050F0D4E7E34CFC0288EEBD528321F338D68E283DE2E8BBA635053F60CC59CF4BD3A5D3C4DB0645EFA5055A05E9ABA33E36AB659B41C62C1196A3FDAF5103D9A0CA9BEEBEEE8A8F1A893735ED71507EA6AACFC49388D9327D9611C8B18C756ABA1EC5138B312CA922CE452BE0A67C452A65A4CC3DCCB706636E6BEED9ADA75A96DCD95EC7D2CD7F2A76934409E64B1E42BDF9931EBBE32D51CA9783846E3146936D6A67A06C61A9B2ADD1C8D7E0946A3D1E9E668F463301A8D4EFF708B6589BFA913FD64CEDF9A29AA1E62AFB175487B8DFD901A4BF93F5B6B6A71B66DAFA0CA92BBA897361EB55E4755F01EF359CADA4B2F32E72D9EE49EDBFA58E3822B37CBE23A44382F6899B871E76F3186FE28C9309AFFCB9B7988F4B7CA700D02F404639CBD4F758F0F8F8EB960E5BB13387C1CC74B4FE2F916A287B38335C00B5B9488B4F60DADF503D7023E7801D1E219447FF6C1EB5FDA3D946D074585C92D80F840B96DE368A7A2146E7A5D054BF83A757F4B4B9D3857FF78280B1E38B71121F28973E8FC5E53BD5D24E73D8BFA1D7A2E9A82E9C0E7C57A1976C5BBB4F73AF6A557D84EC279310B094BAA8674D041E39AD352AD2A96399CED1A2122F4C6B50FC2332A106A8ADF320C6A3D46F3F8A21F43E092B89E56CADD919E3111416DD42B2DD8AA7A26926813D23171449B003051449B00F031449B60C8238876AF401F446FBA5A0C3111C55AAEABB82861D2C5551227AC5510B0766D14037B2DC978E06E027B358612037B3586DABDA5A8DE39BA57C0BD02EE15B05705943A3FFFF07AD7D897D469B4B2FCCABBFD6374F6FD548318678D9E7FAAEEB3F61288EC1D3C4E378D3D663244B561A34494BEC344990E4257D1C43E5E04B10EA2850D3FEC8A1B80DB1EF7F716F9CB72F40C62E8C811078A9863375A1D07EEFA5071BA3A98F4CB17E84DA27BEDF6D4AFBE2FB76BB37F8B785B1D05D5DAAA41B019A86D9883771615AB23ABC0869268154B6BF7ED44CDBDBD5D3418ED63597516B76A3BCBCB46E336E84AF3DD469B6A1B5DCAD004751B4B6A88F137374ABB10294A7CD6CC0F982418943A125476936EEA2E1F13CF70E6D7320F12A58C102583B58B1DA50F1C25C5B78B2BA50E2AA504AF05161757421D621659754D4352E9E25169EA3182676712693D6C1655854D025AE9A259C9EA193AD415A366D4337DD150F09E3FFEFDB5E053DF6A2C2B9326AAD60DD2E7C31D75AF8740556283B7DCD101C24F5976A2669BA97B03DA9938DAC7936AA2AB9C7D659EE075D7B521A245997461EBE3DC53E8A7A6232F9BFAE48FBB7AE8FE50019DAC3A36B029EC2738932C1893B6A386FCE926E892F83C866C26364172F120FB750E63B4AA20260433800B661B51E6B90A9EC26243C3B5A8C8C29D815F430C96648F711A61F40416987C5EC0384EFFFED837E06D48960BFF112EAF82DB0D5E6F30E932F41F3DE68FA825BB225DFD696429B6CD93DB75FA37C6BAE80269264AEE6ADC06671BE42DCB765F4A0EEE1510C9762BBFA0908C254E2E2AACDE4AA41BC27133A05C7CE52EF11EFA6B8F80C5B7C11CBCC0266DFB1AC35FE10A2CDE8A574E6A90FA8160C53E39476015013FCE31AAF2E427E1F0D27FFDE9FF251685A5B7920000 , N'6.1.0-30225')

Running Seed method.

Veritabanına baktığınızda OBS veritabanı ve OBSContext sınıfı içindeki tablolar oluşmuş olacaktır.

5. OBSContext sınıfının tablolarını oluşturma işlemi tamamlandıktan sonra OBSIdentityContext sınıfının tablolarını oluşturalım. Bu işleme başlamadan önce Migrations dizininde oluşan OBSContextInitialCreate dosyasını siliniz.

 

6. OBSIdentityContext sınıfının migration özelliğini açınız.

7. Migrations sınıfının içinde oluşan Configuration.cs sınıfının ismini OBSIdentityContextConfiguration.cs olarak değiştiriniz ve AutomaticMigrationsEnabled özelliğini true olarak güncelleyiniz. Ardından OBSIdentityContextConfiguration  sınıfının Seed metodu içinde tablolar oluşturulurken BilgiIslem, Ogrenci ve OgretimGorevlisi rollerini ve ugur kullanıcısını (123456 şifresi ile) oluşturup ugur kullanıcısını BilgiIslem rolüne ekleyiniz.

namespace OBS.MVC.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;

    internal sealed class OBSIdentityContextConfiguration : DbMigrationsConfiguration<OBS.MVC.Repositories.OBSIdentityContext>
    {
        public OBSIdentityContextConfiguration()
        {
            AutomaticMigrationsEnabled = true;
        }

        protected override void Seed(OBS.MVC.Repositories.OBSIdentityContext context)
        {
            var userManager =
                   new UserManager<OBS.MVC.Models.ApplicationUser>(
                       new Microsoft.AspNet.Identity.EntityFramework.UserStore<OBS.MVC.Models.ApplicationUser>(new OBS.MVC.Repositories.OBSIdentityContext()));

            var roleManager = new Microsoft.AspNet.Identity.RoleManager<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>(
                new Microsoft.AspNet.Identity.EntityFramework.RoleStore<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>(
                    new OBS.MVC.Repositories.OBSIdentityContext()));

            //Rolleri oluşturma
            System.Collections.Generic.List<string> roller = new System.Collections.Generic.List<string>() { "BilgiIslem", "Ogrenci", "OgretimGorevlisi" };
            foreach (string rolAdi in roller)
            {
                if (roleManager.RoleExists(rolAdi) == false) //Eğer rol veritabanında yok ise rolü oluştur
                    roleManager.Create(new Microsoft.AspNet.Identity.EntityFramework.IdentityRole(rolAdi));
            }

            string bilgiIslemKullaniciAdi = "ugur";
            if (userManager.FindByName(bilgiIslemKullaniciAdi) == null) //ugur isimli kullanıcı yoksa
            {
                //Kullanıcıyı oluştur
                OBS.MVC.Models.ApplicationUser bilgiIslemKullanicisi = new OBS.MVC.Models.ApplicationUser()
                {
                    UserName = "ugur"
                };
                var kullaniciKayitSonuc = userManager.Create(bilgiIslemKullanicisi, "123456");

                //Kullanıcı oluştuysa kullanıcıyı "BilgiIslem" rolüne ekle
                if (kullaniciKayitSonuc.Succeeded)
                {
                    userManager.AddToRole(bilgiIslemKullanicisi.Id, "BilgiIslem");
                }
            }
        }
    }
}

8. Kodlamayı tamamladıktan (sorunsuz build alabildikten) sonra OBSIdentityContext ‘in tabloları için Create scriptini (OBSIdentityContextInitialCreate sınıfını) oluşturalım. Bu işlem için komut satırına aşağıdaki komutu yazınız.

Add-Migration OBSIdentityContextInitialCreate -ConfigurationTypeName OBSIdentityContextConfiguration

Komutu çalıştırdığınızda OBSIdentityContextInitialCreate sınıfını, sınıf isminin başında günün tarihi yazacak şekilde oluşturur. İçinde de migration veritabanını ve tabloları oluşturma kodları bulunmaktadır.

namespace OBS.MVC.Migrations
{
    using System;
    using System.Data.Entity.Migrations;
    
    public partial class OBSIdentityContextInitialCreate : DbMigration
    {
        public override void Up()
        {
            CreateTable(
                "dbo.AspNetRoles",
                c => new
                    {
                        Id = c.String(nullable: false, maxLength: 128),
                        Name = c.String(nullable: false),
                    })
                .PrimaryKey(t => t.Id);
            
            CreateTable(
                "dbo.AspNetUsers",
                c => new
                    {
                        Id = c.String(nullable: false, maxLength: 128),
                        UserName = c.String(),
                        PasswordHash = c.String(),
                        SecurityStamp = c.String(),
                        Discriminator = c.String(nullable: false, maxLength: 128),
                    })
                .PrimaryKey(t => t.Id);
            
            CreateTable(
                "dbo.AspNetUserClaims",
                c => new
                    {
                        Id = c.Int(nullable: false, identity: true),
                        ClaimType = c.String(),
                        ClaimValue = c.String(),
                        User_Id = c.String(nullable: false, maxLength: 128),
                    })
                .PrimaryKey(t => t.Id)
                .ForeignKey("dbo.AspNetUsers", t => t.User_Id, cascadeDelete: true)
                .Index(t => t.User_Id);
            
            CreateTable(
                "dbo.AspNetUserLogins",
                c => new
                    {
                        UserId = c.String(nullable: false, maxLength: 128),
                        LoginProvider = c.String(nullable: false, maxLength: 128),
                        ProviderKey = c.String(nullable: false, maxLength: 128),
                    })
                .PrimaryKey(t => new { t.UserId, t.LoginProvider, t.ProviderKey })
                .ForeignKey("dbo.AspNetUsers", t => t.UserId, cascadeDelete: true)
                .Index(t => t.UserId);
            
            CreateTable(
                "dbo.AspNetUserRoles",
                c => new
                    {
                        UserId = c.String(nullable: false, maxLength: 128),
                        RoleId = c.String(nullable: false, maxLength: 128),
                    })
                .PrimaryKey(t => new { t.UserId, t.RoleId })
                .ForeignKey("dbo.AspNetRoles", t => t.RoleId, cascadeDelete: true)
                .ForeignKey("dbo.AspNetUsers", t => t.UserId, cascadeDelete: true)
                .Index(t => t.UserId)
                .Index(t => t.RoleId);
            
        }
        
        public override void Down()
        {
            DropForeignKey("dbo.AspNetUserClaims", "User_Id", "dbo.AspNetUsers");
            DropForeignKey("dbo.AspNetUserRoles", "UserId", "dbo.AspNetUsers");
            DropForeignKey("dbo.AspNetUserRoles", "RoleId", "dbo.AspNetRoles");
            DropForeignKey("dbo.AspNetUserLogins", "UserId", "dbo.AspNetUsers");
            DropIndex("dbo.AspNetUserRoles", new[] { "RoleId" });
            DropIndex("dbo.AspNetUserRoles", new[] { "UserId" });
            DropIndex("dbo.AspNetUserLogins", new[] { "UserId" });
            DropIndex("dbo.AspNetUserClaims", new[] { "User_Id" });
            DropTable("dbo.AspNetUserRoles");
            DropTable("dbo.AspNetUserLogins");
            DropTable("dbo.AspNetUserClaims");
            DropTable("dbo.AspNetUsers");
            DropTable("dbo.AspNetRoles");
        }
    }
}

9. OBSIdentityContext’in tablolarını oluşturma kodları hazırlandıktan sonra veritabanına bu tabloları ekleyebilirsiniz. Bunun için aşağıdaki komutları yazınız.

Update-Database -ConfigurationTypeName OBSIdentityContextConfiguration

Komutu çalıştırdığınızda açıklama satırları (yapılan işlemler) aşağıdaki gibi olacak ve veritabanı üzerinde tablolar oluşacaktır.

Veritabanını ve tabloları oluşturduktan sonra projeyi çalıştırıp “Bilgi İşlem Girişi” sayfasında kullanıcı adına “ugur”, şifreye “123456” yazıp sisteme giriş yapabilirsiniz.