具有空值的Mysql EF Core char列引发ArgumentOutOfRangeException

时间:2020-10-28 01:19:44

标签: mysql ef-core-3.1

我需要从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问题?

1 个答案:

答案 0 :(得分:0)

这是MySql.Data版本8.0.22的错误。我有同样的问题,正在等待下一个版本。 https://bugs.mysql.com/bug.php?id=101252

相关问题