我在MySql数据库中有一个表,其中的一列为int unsigned
类型,代表Unix时间戳。我正在使用带有官方MySql连接器MySql.Data.EntityFrameworkCore
(NuGet版本8.0.15)的Entity Framework Core 2.2.2。
在我们的实体模型中,我们尝试使用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执行此类映射?也许有解决方法?