Как сопоставить столбец типа «int unsigned» с «long» с помощью сущности 2.2.2 и коннектора MySql - PullRequest
1 голос
/ 08 апреля 2019

У меня есть таблица в базе данных 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?Может быть, есть обходной путь для этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...