Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 

76 rader
2.2 KiB

  1. using Microsoft.EntityFrameworkCore;
  2. using System;
  3. using System.Linq;
  4. using System.Reflection;
  5. using Domain;
  6. using Domain.Identity;
  7. using Infrastructure;
  8. using Domain.BaseData;
  9. namespace Core.Db
  10. {
  11. public class PanakDbContext : DbContext
  12. {
  13. public PanakDbContext(DbContextOptions options) : base(options)
  14. {
  15. }
  16. public DbSet<Account> Accounts { get; set; }
  17. public DbSet<Role> Roles { get; set; }
  18. public DbSet<AccountRole> AccountRoles { get; set; }
  19. public DbSet<LoginToken> LoginTokens { get; set; }
  20. public DbSet<RefreshToken> RefreshTokens { get; set; }
  21. #region ThisProject
  22. public DbSet<Plant> Plants { get; set; }
  23. #endregion
  24. protected override void OnModelCreating(ModelBuilder modelBuilder)
  25. {
  26. modelBuilder.Entity<LoginToken>()
  27. .HasOne(x => x.RefreshToken)
  28. .WithOne(a => a.LoginToken)
  29. .HasForeignKey<RefreshToken>(x => x.LoginTokenId);
  30. modelBuilder.Entity<Role>().HasData(
  31. new Role { Name = Consts.AdminRole },
  32. new Role { Name = Consts.Developer }
  33. );
  34. base.OnModelCreating(modelBuilder);
  35. }
  36. protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
  37. {
  38. optionsBuilder.UseLazyLoadingProxies();
  39. base.OnConfiguring(optionsBuilder);
  40. }
  41. }
  42. public static class EFFilterExtensions
  43. {
  44. public static void ApplySoftDeleteFilter(this ModelBuilder modelBuilder, Type entityType)
  45. {
  46. SetSoftDeleteFilterMethod.MakeGenericMethod(entityType).Invoke(null, new object[] { modelBuilder });
  47. }
  48. static readonly MethodInfo SetSoftDeleteFilterMethod = typeof(EFFilterExtensions)
  49. .GetMethods(BindingFlags.Public | BindingFlags.Static)
  50. .Single(t => t.IsGenericMethod && t.Name == "ApplySoftDeleteFilter");
  51. public static void ApplySoftDeleteFilter<TEntity>(this ModelBuilder modelBuilder) where TEntity : BaseEntity
  52. {
  53. modelBuilder.Entity<TEntity>().HasQueryFilter(x => !x.Deleted);
  54. }
  55. }
  56. }