【发布时间】:2020-10-28 01:19:44
【问题描述】:
我需要从 MySql 服务器读取一些数据以获取 API 解决方案。 数据库搭建好了,我们遇到了一个问题,GUID 存储在“char(36) DEFAULT NULL”中 当尝试读取具有该列的实体并且数据库值为 null 时,将引发以下异常:
Exception thrown: 'System.ArgumentOutOfRangeException' in System.Text.Encoding.CodePages.dll
Exception thrown: 'System.ArgumentOutOfRangeException' in System.Private.CoreLib.dll
Microsoft.EntityFrameworkCore.Query: Error: An exception occurred while iterating over the results of a query for context type 'DbContext'.
System.ArgumentOutOfRangeException: Non-negative number required. (Parameter 'count')
at System.Text.EncodingNLS.GetString(Byte[] bytes, Int32 index, Int32 count)
at MySql.Data.MySqlClient.NativeDriver.ReadColumnValue(Int32 index, MySqlField field, IMySqlValue valObject)
at MySql.Data.MySqlClient.ResultSet.ReadColumnData(Boolean outputParms)
at MySql.Data.MySqlClient.ResultSet.NextRow(CommandBehavior behavior)
at MySql.Data.MySqlClient.MySqlDataReader.Read()
at System.Data.Common.DbDataReader.ReadAsync(CancellationToken cancellationToken)
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.AsyncEnumerator.MoveNextAsync()
System.ArgumentOutOfRangeException: Non-negative number required. (Parameter 'count')
at System.Text.EncodingNLS.GetString(Byte[] bytes, Int32 index, Int32 count)
at MySql.Data.MySqlClient.NativeDriver.ReadColumnValue(Int32 index, MySqlField field, IMySqlValue valObject)
at MySql.Data.MySqlClient.ResultSet.ReadColumnData(Boolean outputParms)
at MySql.Data.MySqlClient.ResultSet.NextRow(CommandBehavior behavior)
at MySql.Data.MySqlClient.MySqlDataReader.Read()
at System.Data.Common.DbDataReader.ReadAsync(CancellationToken cancellationToken)
--- End of stack trace from previous location where exception was thrown ---
at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.AsyncEnumerator.MoveNextAsync()
Exception thrown: 'System.ArgumentOutOfRangeException' in Microsoft.EntityFrameworkCore.Relational.dll
脚手架模型:
public class XTable
{
public int Id { get; set; }
public string ProblemColumn { get; set; }
}
modelBuilder.Entity<XTable>(entity =>
{
entity.HasKey(e => e.Id).HasName("PRIMARY");
entity.ToTable("XTable");
entity.Property(e => e.ProblemColumn)
.HasColumnName("problemColumn")
.HasMaxLength(36)
.IsFixedLength();
}
**Context DBSet**
public virtual DbSet<XTable> XTables{ get; set; }
**Example of use case**
var result = dbContext.XTables.SingleOrDefaultAsync(a => a.Id == id);
环境: .Net Standard 2.0 被 3.1 asp netcore 消耗
Microsoft.EntityFrameworkCore 3.1.9 MySql.Data.EntityFrameworkCore 8.0.22
如上所示,是否将依赖项更新到最新的马厩。
如前所述,仅当行列值为空时,我尝试了模型的各种变体,删除了“HasMaxLength”、“IsFixedLength”,但没有任何区别。
如果数据库中的行值为空白或其中有一个 guid 读取正常。
只是想知道是否有人知道 MySQL 和 ef 核心与 char 列问题?
【问题讨论】:
标签: mysql ef-core-3.1