using BlueWest.Data; using BlueWest.Domain.Model; using BlueWest.Domain.Extensions; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using BlueWest.EfMethods; namespace BlueWest.Domain { /// /// Countries and Currencies /// [EfGenerator] public sealed class CountryDbContext : DbContext { #region Countries /// /// Countries /// [EfGetOneBy(nameof(Country.Id), typeof(CountryUnique))] [EfGetOne(typeof(CountryUnique))] [EfAddMethods(createType: typeof(CountryCreate), returnType: typeof(CountryUnique))] [EfUpdateMethods( updateType: typeof(CountryUpdate), returnType: typeof(CountryUnique), keyPropertyMemberName: nameof(Country.Id))] [EfGetMany(typeof(CountryUnique))] [EfGetList(nameof(Country.Currencies), typeof(CurrencyUnique), nameof(Country.Id))] [EfAddToList(nameof(Country.Currencies), typeof(CurrencyCreate), typeof(CurrencyUnique), nameof(Country.Id))] [EfGetOneFromList(nameof(Country.Id), nameof(Country.Currencies), nameof(Currency.Id), typeof(CurrencyUnique))] public DbSet Countries { get; set; } #endregion #region Currencies /// /// Currencies Database Table /// [EfAddMethods(typeof(CurrencyCreate), typeof(CurrencyUnique))] [EfUpdateMethods(typeof(CurrencyUpdate), typeof(CurrencyUnique), nameof(Currency.Id))] [EfGetOneBy(nameof(Currency.Id), typeof(CurrencyUnique))] [EfGetOne(typeof(CurrencyUnique))] [EfGetMany(typeof(CurrencyUnique))] [EfGetList(nameof(Currency.Countries), typeof(CountryUnique), nameof(Currency.Id))] [EfGetOneFromList(nameof(Currency.Id), nameof(Currency.Countries), nameof(Country.Id), typeof(CountryUnique))] public DbSet Currencies { get; set; } #endregion #region Initialization /// /// App Configuration /// public IConfiguration Configuration; /// /// CountryDbContext Constructor. /// /// public CountryDbContext(DbContextOptions options) : base(options) { Database.EnsureCreated(); } /// /// On model creating. /// /// protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.ConfigureCurrentDbModel(); modelBuilder.AddCurrencyAndCountryData(); } #endregion } }