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().ToTable("Currencies");
modelBuilder.Entity().ToTable("Countries");
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");
});
}
}
}