我需要从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
是否已将依赖关系更新到最新的稳定器,如上所示。
如前所述,将其范围缩小到仅当行列值为null时,我尝试了该模型的各种变体,删除了没有任何区别的“ HasMaxLength”,“ IsFixedLength”。
如果数据库中的行值为空白或其中包含guid,则表示正常。
只是想知道是否有人知道带有char列的MySQL和ef core问题?
答案 0 :(得分:0)
这是MySql.Data版本8.0.22的错误。我有同样的问题,正在等待下一个版本。 https://bugs.mysql.com/bug.php?id=101252