93 lines
2.7 KiB
C#
93 lines
2.7 KiB
C#
|
using BlueWest.Data;
|
||
|
using Microsoft.EntityFrameworkCore;
|
||
|
|
||
|
namespace BlueWest.WebApi.MySQL.Model
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Database model configuration extensions
|
||
|
/// </summary>
|
||
|
public static class ModelBuilderExtensions
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Setup the database model
|
||
|
/// </summary>
|
||
|
/// <param name="modelBuilder"></param>
|
||
|
public static void ConfigureCurrentDbModel(this ModelBuilder modelBuilder)
|
||
|
{
|
||
|
modelBuilder
|
||
|
.ConfigureDatabaseKeys()
|
||
|
.CountryCurrencyModel()
|
||
|
.ConfigureUserModel();
|
||
|
}
|
||
|
|
||
|
private static ModelBuilder ConfigureDatabaseKeys(this ModelBuilder modelBuilder)
|
||
|
{
|
||
|
// User PK
|
||
|
modelBuilder.Entity<User>(builder => builder
|
||
|
.HasKey(user => user.Id));
|
||
|
|
||
|
// Country PK
|
||
|
modelBuilder.Entity<Country>(builder => builder
|
||
|
.HasKey(country => country.Code));
|
||
|
|
||
|
// Currency PK
|
||
|
modelBuilder.Entity<Currency>(builder => builder
|
||
|
.HasKey(currency => currency.Num));
|
||
|
|
||
|
// FinanceOp PK
|
||
|
return
|
||
|
modelBuilder.Entity<FinanceOp>(builder => builder
|
||
|
.HasKey(financeOp => financeOp.Id));
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
private static ModelBuilder CountryCurrencyModel(this ModelBuilder modelBuilder)
|
||
|
{
|
||
|
|
||
|
// Relationships
|
||
|
modelBuilder
|
||
|
.Entity<Currency>()
|
||
|
.HasMany(ub => ub.Countries)
|
||
|
.WithMany(au => au.Currencies);
|
||
|
|
||
|
modelBuilder.Entity<Country>()
|
||
|
.HasMany(ub => ub.Currencies)
|
||
|
.WithMany(au => au.Countries);
|
||
|
|
||
|
return modelBuilder;
|
||
|
|
||
|
}
|
||
|
|
||
|
private static ModelBuilder ConfigureUserModel(this ModelBuilder modelBuilder)
|
||
|
{
|
||
|
|
||
|
// User => Country
|
||
|
modelBuilder
|
||
|
.Entity<User>(builder => builder
|
||
|
.HasOne<Country>()
|
||
|
.WithMany(co => co.Users));
|
||
|
|
||
|
|
||
|
// Country => User
|
||
|
modelBuilder
|
||
|
.Entity<Country>(builder => builder
|
||
|
.HasMany<User>()
|
||
|
.WithOne(u => u.Country)
|
||
|
.HasForeignKey(x => x.CountryId));
|
||
|
|
||
|
|
||
|
// FinanceOp => User
|
||
|
modelBuilder
|
||
|
.Entity<FinanceOp>(builder => builder
|
||
|
.HasOne<User>()
|
||
|
.WithMany(ft => ft.FinanceTransactions)
|
||
|
.HasForeignKey(x => x.UserId));
|
||
|
|
||
|
|
||
|
return modelBuilder;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|