using BlueWest.Data; using BlueWest.WebApi.Context.Users; using Microsoft.EntityFrameworkCore; namespace BlueWest.WebApi.EF.Model { /// /// Database model configuration extensions /// public static class ModelBuilderExtensions { #region Initialization static ModelBuilderExtensions() { } /// /// Setup the database model /// /// public static void ConfigureCurrentDbModel(this ModelBuilder modelBuilder) { modelBuilder .ConfigureDatabaseKeys() .CurrencyModel() .ConfigureUserModel(); //.ConfigureIdentityModel(); } #endregion #region DatabasePK private static ModelBuilder ConfigureDatabaseKeys(this ModelBuilder modelBuilder) { // User modelBuilder .Entity(builder => builder .HasKey(user => user.Id)) .Entity().Property(user => user.Id) .ValueGeneratedOnAdd(); // Country modelBuilder .Entity(builder => builder .HasKey(country => country.Id)) .Entity().Property(country => country.Id) .ValueGeneratedOnAdd(); // Currency modelBuilder .Entity(builder => builder .HasKey(currency => currency.Id)) .Entity() .Property(currency => currency.Id) .ValueGeneratedOnAdd(); // Company PK modelBuilder .Entity(builder => builder .HasKey(company => company.Id)) .Entity().Property(company => company.Id) .ValueGeneratedOnAdd(); // Industry PK modelBuilder .Entity(builder => builder .HasKey(industry => industry.Id)) .Entity().Property(industry => industry.Id) .ValueGeneratedOnAdd(); // Product modelBuilder .Entity(builder => builder .HasKey(industry => industry.Id)); modelBuilder .Entity() .Property(industry => industry.Id) .ValueGeneratedOnAdd(); // FinanceOp return modelBuilder.Entity(builder => builder .HasKey(financeOp => financeOp.Id)); } #endregion #region Database Models private static ModelBuilder CurrencyModel(this ModelBuilder modelBuilder) { modelBuilder .Entity() .HasMany(ub => ub.Countries) .WithMany(au => au.Currencies); modelBuilder.Entity() .HasMany(ub => ub.Currencies) .WithMany(au => au.Countries); return modelBuilder; } private static ModelBuilder ConfigureUserModel(this ModelBuilder modelBuilder) { // FinanceOp => User modelBuilder .Entity(builder => builder .HasOne() .WithMany(ft => ft.FinanceTransactions) .HasForeignKey(x => x.UserId)); modelBuilder.Entity(b => b.HasOne() .WithMany(x => x.Users) .HasForeignKey(x => x.ApplicationUserId)); return modelBuilder; } #endregion public static void ConfigureIdentityModel(this ModelBuilder builder) { builder.Entity(b => { b.HasMany().WithOne().HasForeignKey(ur => ur.UserId).IsRequired(); }); 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"); }); } } }