Estoy tratando de usar el nuevo tipo TimeOnly de C# pero cuando llego a hacer mis migraciones tengo el siguiente problema. Estoy usando SQL Server 2019, el error es.
La propiedad 'PassportOffice.CloseTime' es del tipo 'DateTime', que no es compatible con el proveedor de base de datos actual. Cambie el tipo de propiedad CLR o ignore la propiedad usando el atributo '[NotMapped]' o usando 'EntityTypeBuilder.Ignore' en 'OnModelCreating'.
Estoy usando Entity Framework Core 6. El modelo es el siguiente.
public class PassportOffice { public int Id { get; set; } [Required] public TimeOnly OpenTime { get; set; } [Required] public TimeOnly CloseTime { get; set; } }Así que he intentado hacer un convertidor TimeOnly
public class TimeOnlyConverter : ValueConverter<TimeOnly, DateTime> { public TimeOnlyConverter() : base( timeOnly => new DateTime(DateOnly.MinValue.Year, DateOnly.MinValue.Month, DateOnly.MinValue.Day, timeOnly.Hour, timeOnly.Minute, timeOnly.Second), dateTime => TimeOnly.FromDateTime(dateTime)) { } }Y lo usé en DbContext de la siguiente manera
protected override void ConfigureConventions(ModelConfigurationBuilder configurationBuilder) { configurationBuilder.Properties<TimeOnly>() .HaveConversion<TimeOnlyConverter>() .HaveColumnType("time(0)"); }¿Cometí un error? O hay alguna otra forma de solucionar el problema?
Entity Framework Map CLR type TimeSpan SQL Server type to time
Cambie la definición del modelo como se muestra a continuación
public class PassportOffice { public int Id { get; set; } [Required] public TimeSpan OpenTime { get; set; } [Required] public TimeSpan CloseTime { get; set; } }No hay necesidad de convertidor. funcionará como se esperaba