У меня есть таблица в базе данных MySql, где один из столбцов имеет тип int unsigned
и представляет метки времени Unix.Я использую Entity Framework Core 2.2.2 с официальным коннектором MySql MySql.Data.EntityFrameworkCore
, NuGet версии 8.0.15.
В нашей модели сущностей мы пытаемся представить это поле свойством EndTariffPlan
типа long?
с помощью этой логики в методе OnModelCreating
:
modelBuilder.Entity<User>(entity =>
{
entity.Property(e => e.EndTariffPlan)
.HasColumnName("endTariffPlan")
.HasColumnType("int(11) unsigned");
}
Когда отметка временибольше Int32.MaxValue
, запросы к базе данных, такие как _dbContext.User.FirstOrDefault()
, не выполняются, за исключением
System.OverflowException: Value was either too large or too small for an Int32.
An unhandled exception has occurred while executing the request. System.OverflowException: Value was either too large or too small for an Int32.
at System.Convert.ThrowInt32OverflowException()
at System.UInt32.System.IConvertible.ToInt32(IFormatProvider provider)
at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
at MySql.Data.MySqlClient.MySqlDataReader.GetInt32(Int32 i)
at lambda_method(Closure , DbDataReader )
at Microsoft.EntityFrameworkCore.Storage.Internal.TypedRelationalValueBufferFactory.Create(DbDataReader dataReader)
Я также пытался добавить CastingConverter
для этого свойства:
var intToLongConverter = new CastingConverter<long, int>();
entity.Property(e => e.EndTariffPlan)
.HasColumnName("endTariffPlan")
.HasColumnType("int(11) unsigned")
.HasConversion(intToLongConverter);
, но результат точно такой же.
Тот же код работал с Entity Framework Core 2.0 и MySql.Data.EntityFrameworkCore
8.0.12.
Как выполнить такой типсопоставление с новыми версиями Entity Framework Core и MySql.Data.EntityFrameworkCore?Может быть, есть обходной путь для этого?