using BlueWest.Data;
using BlueWest.EfMethods;
using BlueWest.WebApi.Context.Users;
using BlueWest.WebApi.EF.Model;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
namespace BlueWest.WebApi.Context
{
///
/// Application User Db Context
///
[EfGenerator]
public class ApplicationUserDbContext : IdentityDbContext<
ApplicationUser,
ApplicationRole,
string,
ApplicationUserClaim,
ApplicationUserRole,
ApplicationUserLogin,
ApplicationRoleClaim,
ApplicationUserToken>
{
///
[EfGetMany(typeof(ApplicationUserClaim))]
public sealed override DbSet UserClaims { get; set; }
[EfGetMany(typeof(ApplicationUserRole))]
///
public sealed override DbSet UserRoles { get; set; }
[EfGetMany(typeof(ApplicationRole))]
///
public sealed override DbSet Roles { get; set; }
[EfGetMany(typeof(ApplicationRoleClaim))]
///
public sealed override DbSet RoleClaims { get; set; }
///
public ApplicationUserDbContext(DbContextOptions options) : base(options)
{
Database.EnsureCreated();
}
///
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity().ToTable("UserRoles");
builder.Entity(b =>
{
b.HasMany()
.WithOne()
.HasForeignKey(ur => ur.UserId).IsRequired();
});
builder.Entity().ToTable("ApplicationUser")
.HasKey(x => x.Id);
builder.Entity(b =>
{
b.HasKey(r => r.Id);
b.HasIndex(r => r.NormalizedName).HasDatabaseName("RoleNameIndex").IsUnique();
b.ToTable("Roles");
b.Property(r => r.ConcurrencyStamp).IsConcurrencyToken();
b.Property(u => u.Name).HasMaxLength(256);
b.Property(u => u.NormalizedName).HasMaxLength(256);
b.HasMany().WithOne().HasForeignKey(ur => ur.RoleId).IsRequired();
b.HasMany().WithOne().HasForeignKey(rc => rc.RoleId).IsRequired();
});
builder.Entity(b =>
{
b.HasKey(rc => rc.Id);
b.ToTable("RoleClaims");
});
builder.Entity(b =>
{
b.HasKey(r => new {r.UserId, r.RoleId});
b.ToTable("UserRoles");
});
builder.Entity(b => b.HasOne()
.WithMany(x => x.Users)
.HasForeignKey(x => x.ApplicationUserId));
builder.Entity().ToTable("RoleClaims");
builder.Entity().ToTable("UserRole");
builder.ConfigureCurrentDbModel();
}
}
}