【问题标题】:Mysql EF Core char column with null value throws ArgumentOutOfRangeException具有空值的 Mysql EF Core char 列抛出 ArgumentOutOfRangeException
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2017-06-17
      • 1970-01-01
      • 2021-06-04
      • 1970-01-01
      • 2019-02-10
      • 1970-01-01
      • 2016-10-02
      • 2017-06-20
      • 1970-01-01
      相关资源
      最近更新 更多