// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using Microsoft.Data.Entity; using Microsoft.Data.Entity.Metadata; namespace Microsoft.AspNet.Identity.EntityFramework { public class IdentityDbContext : IdentityDbContext { } public class IdentityDbContext : IdentityDbContext where TUser : IdentityUser { } public class IdentityDbContext : DbContext where TUser : IdentityUser where TRole : IdentityRole where TKey : IEquatable { public DbSet Users { get; set; } public DbSet> UserClaims { get; set; } public DbSet> UserLogins { get; set; } public DbSet> UserRoles { get; set; } public DbSet Roles { get; set; } public DbSet> RoleClaims { get; set; } protected override void OnModelCreating(ModelBuilder builder) { // TODO: Temporary change. // Can be reverted once https://github.com/aspnet/EntityFramework/issues/1960 is closed builder.ForSqlServer().UseIdentity(); builder.Entity(b => { b.Key(u => u.Id); b.Table("AspNetUsers"); b.Property(u => u.ConcurrencyStamp).ConcurrencyToken(); b.Collection(u => u.Claims).InverseReference().ForeignKey(uc => uc.UserId); b.Collection(u => u.Logins).InverseReference().ForeignKey(ul => ul.UserId); b.Collection(u => u.Roles).InverseReference().ForeignKey(ur => ur.UserId); }); builder.Entity(b => { b.Key(r => r.Id); b.Table("AspNetRoles"); b.Property(r => r.ConcurrencyStamp).ConcurrencyToken(); b.Collection(r => r.Users).InverseReference().ForeignKey(ur => ur.RoleId); b.Collection(r => r.Claims).InverseReference().ForeignKey(rc => rc.RoleId); }); builder.Entity>(b => { b.Key(uc => uc.Id); b.Table("AspNetUserClaims"); }); builder.Entity>(b => { b.Key(rc => rc.Id); b.Table("AspNetRoleClaims"); }); builder.Entity>(b => { b.Key(r => new { r.UserId, r.RoleId }); b.Table("AspNetUserRoles"); }); // Blocks delete currently without cascade //.ForeignKeys(fk => fk.ForeignKey(f => f.UserId)) //.ForeignKeys(fk => fk.ForeignKey(f => f.RoleId)); builder.Entity>(b => { b.Key(l => new { l.LoginProvider, l.ProviderKey }); b.Table("AspNetUserLogins"); }); } } }