ModelBuilderExtensions.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using System;
  2. using Jellyfin.Server.Implementations.ValueConverters;
  3. using Microsoft.EntityFrameworkCore;
  4. using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
  5. namespace Jellyfin.Server.Implementations
  6. {
  7. /// <summary>
  8. /// Model builder extensions.
  9. /// </summary>
  10. public static class ModelBuilderExtensions
  11. {
  12. /// <summary>
  13. /// Specify value converter for the object type.
  14. /// </summary>
  15. /// <param name="modelBuilder">The model builder.</param>
  16. /// <param name="converter">The <see cref="ValueConverter{TModel,TProvider}"/>.</param>
  17. /// <typeparam name="T">The type to convert.</typeparam>
  18. /// <returns>The modified <see cref="ModelBuilder"/>.</returns>
  19. public static ModelBuilder UseValueConverterForType<T>(this ModelBuilder modelBuilder, ValueConverter converter)
  20. {
  21. var type = typeof(T);
  22. foreach (var entityType in modelBuilder.Model.GetEntityTypes())
  23. {
  24. foreach (var property in entityType.GetProperties())
  25. {
  26. if (property.ClrType == type)
  27. {
  28. property.SetValueConverter(converter);
  29. }
  30. }
  31. }
  32. return modelBuilder;
  33. }
  34. /// <summary>
  35. /// Specify the default <see cref="DateTimeKind"/>.
  36. /// </summary>
  37. /// <param name="modelBuilder">The model builder to extend.</param>
  38. /// <param name="kind">The <see cref="DateTimeKind"/> to specify.</param>
  39. public static void SetDefaultDateTimeKind(this ModelBuilder modelBuilder, DateTimeKind kind)
  40. {
  41. modelBuilder.UseValueConverterForType<DateTime>(new DateTimeKindValueConverter(kind));
  42. modelBuilder.UseValueConverterForType<DateTime?>(new DateTimeKindValueConverter(kind));
  43. }
  44. }
  45. }