mirror of
https://github.com/jellyfin/jellyfin.git
synced 2024-11-16 02:18:54 -07:00
Merge pull request #4580 from crobibero/efcore-datetime
Specify default DateTimeKind from EFCore
This commit is contained in:
commit
65087a382e
@ -1,5 +1,6 @@
|
|||||||
#pragma warning disable CS1591
|
#pragma warning disable CS1591
|
||||||
|
|
||||||
|
using System;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Jellyfin.Data.Entities;
|
using Jellyfin.Data.Entities;
|
||||||
using Jellyfin.Data.Interfaces;
|
using Jellyfin.Data.Interfaces;
|
||||||
@ -140,6 +141,7 @@ namespace Jellyfin.Server.Implementations
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
{
|
{
|
||||||
|
modelBuilder.SetDefaultDateTimeKind(DateTimeKind.Utc);
|
||||||
base.OnModelCreating(modelBuilder);
|
base.OnModelCreating(modelBuilder);
|
||||||
|
|
||||||
modelBuilder.HasDefaultSchema("jellyfin");
|
modelBuilder.HasDefaultSchema("jellyfin");
|
||||||
|
48
Jellyfin.Server.Implementations/ModelBuilderExtensions.cs
Normal file
48
Jellyfin.Server.Implementations/ModelBuilderExtensions.cs
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
using System;
|
||||||
|
using Jellyfin.Server.Implementations.ValueConverters;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
|
||||||
|
namespace Jellyfin.Server.Implementations
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Model builder extensions.
|
||||||
|
/// </summary>
|
||||||
|
public static class ModelBuilderExtensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Specify value converter for the object type.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="modelBuilder">The model builder.</param>
|
||||||
|
/// <param name="converter">The <see cref="ValueConverter{TModel,TProvider}"/>.</param>
|
||||||
|
/// <typeparam name="T">The type to convert.</typeparam>
|
||||||
|
/// <returns>The modified <see cref="ModelBuilder"/>.</returns>
|
||||||
|
public static ModelBuilder UseValueConverterForType<T>(this ModelBuilder modelBuilder, ValueConverter converter)
|
||||||
|
{
|
||||||
|
var type = typeof(T);
|
||||||
|
foreach (var entityType in modelBuilder.Model.GetEntityTypes())
|
||||||
|
{
|
||||||
|
foreach (var property in entityType.GetProperties())
|
||||||
|
{
|
||||||
|
if (property.ClrType == type)
|
||||||
|
{
|
||||||
|
property.SetValueConverter(converter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return modelBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Specify the default <see cref="DateTimeKind"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="modelBuilder">The model builder to extend.</param>
|
||||||
|
/// <param name="kind">The <see cref="DateTimeKind"/> to specify.</param>
|
||||||
|
public static void SetDefaultDateTimeKind(this ModelBuilder modelBuilder, DateTimeKind kind)
|
||||||
|
{
|
||||||
|
modelBuilder.UseValueConverterForType<DateTime>(new DateTimeKindValueConverter(kind));
|
||||||
|
modelBuilder.UseValueConverterForType<DateTime?>(new DateTimeKindValueConverter(kind));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
|
|
||||||
|
namespace Jellyfin.Server.Implementations.ValueConverters
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// ValueConverter to specify kind.
|
||||||
|
/// </summary>
|
||||||
|
public class DateTimeKindValueConverter : ValueConverter<DateTime, DateTime>
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="DateTimeKindValueConverter"/> class.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="kind">The kind to specify.</param>
|
||||||
|
/// <param name="mappingHints">The mapping hints.</param>
|
||||||
|
public DateTimeKindValueConverter(DateTimeKind kind, ConverterMappingHints mappingHints = null)
|
||||||
|
: base(v => v.ToUniversalTime(), v => DateTime.SpecifyKind(v, kind), mappingHints)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,24 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Globalization;
|
|
||||||
using System.Text.Json;
|
|
||||||
using System.Text.Json.Serialization;
|
|
||||||
|
|
||||||
namespace MediaBrowser.Common.Json.Converters
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Returns an ISO8601 formatted datetime.
|
|
||||||
/// </summary>
|
|
||||||
/// <remarks>
|
|
||||||
/// Used for legacy compatibility.
|
|
||||||
/// </remarks>
|
|
||||||
public class JsonDateTimeIso8601Converter : JsonConverter<DateTime>
|
|
||||||
{
|
|
||||||
/// <inheritdoc />
|
|
||||||
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
|
|
||||||
=> reader.GetDateTime();
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
|
|
||||||
=> writer.WriteStringValue(value.ToString("O", CultureInfo.InvariantCulture));
|
|
||||||
}
|
|
||||||
}
|
|
@ -43,7 +43,6 @@ namespace MediaBrowser.Common.Json
|
|||||||
options.Converters.Add(new JsonVersionConverter());
|
options.Converters.Add(new JsonVersionConverter());
|
||||||
options.Converters.Add(new JsonStringEnumConverter());
|
options.Converters.Add(new JsonStringEnumConverter());
|
||||||
options.Converters.Add(new JsonNullableStructConverterFactory());
|
options.Converters.Add(new JsonNullableStructConverterFactory());
|
||||||
options.Converters.Add(new JsonDateTimeIso8601Converter());
|
|
||||||
|
|
||||||
return options;
|
return options;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user