Microsoft.Data.SqlClient.SqlBuffer 无法将“System.String”类型的对象转换为“System.Guid”类型
Posted
技术标签:
【中文标题】Microsoft.Data.SqlClient.SqlBuffer 无法将“System.String”类型的对象转换为“System.Guid”类型【英文标题】:Microsoft.Data.SqlClient.SqlBuffer Unable to cast object of type 'System.String' to type 'System.Guid' 【发布时间】:2022-01-13 18:24:38 【问题描述】:错误:System.InvalidCastException:无法将“System.String”类型的对象转换为“System.Guid”类型。 在 Microsoft.Data.SqlClient.SqlBuffer.get_Guid() 在 Microsoft.Data.SqlClient.SqlDataReader.GetGuid(Int32 i) 在 lambda_method88(闭包,QueryContext,DbDataReader,ResultContext,SingleQueryResultCoordinator) 在 Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable
1.AsyncEnumerator.MoveNextAsync() at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync[TSource](IQueryable
1 来源,CancellationToken cancelToken) 在 Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync[TSource](IQueryable1 source, CancellationToken cancellationToken) at AutoMapper.AspNet.OData.QueryableExtensions.GetAsync[TModel,TData](IQueryable
1 查询,IMapper 映射器,Expression1 filter, Expression
1 queryFunc,ICollection1 includeProperties, AsyncSettings asyncSettings) at AutoMapper.AspNet.OData.QueryableExtensions.GetAsync[TModel,TData](IQueryable
1 查询,IMapper 映射器,ODataQueryOptions1 options, QuerySettings querySettings) at AutoMapper.AspNet.OData.QueryableExtensions.GetAsync[TModel,TData](IQueryable
1 查询,IMapper 映射器,ODataQueryOptions1 options, HandleNullPropagationOption handleNullPropagation) at TRKAPI.Controllers.RecordsController.GetTaskRecord(ODataQueryOptions
1 个选项)在
第 80 行被引用为原因
_context.TaskRecord.GetAsync(_mapper, options, HandleNullPropagationOption.Default);
在将表中的列从字符串更改为唯一标识符后开始发生这种情况。
-
我将数据传输到临时表。
我已从相关表格中删除。
我更改了列
正在运行
SELECT DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'TaskRecord'
AND COLUMN_NAME = 'TransactionId'
返回:
DATA_TYPE 唯一标识符
-
然后我从临时表中插入,将 transactionid 列转换为唯一标识符
从列中获取一个值并将其检查为有效的 guid 返回有效。
我更新了合同 (dto)、模型,并且在 db 上下文中没有对列的引用。
我不确定下一步该往哪里看,有什么想法?
【问题讨论】:
是否有任何非架构绑定视图? 您需要提供相关实体的代码(TaskRecord、本文提到的临时表等)以及您尝试执行的操作的实际代码。例如,如果您更改了表或实体中的基础类型而不是相应的位置,或者您进行了更改但尝试使用临时表中的 ExecuteSql() 之类的内容读取此更新的实体,并且临时表仍然具有varchar() 列,您可能会遇到这样的异常。这是没有看到实际代码的任何人的猜测。 @StevePy 有问题的代码实际上只是第 80 行。我在其他任何地方进行了所有更改(ef 模型和映射器使用的合同 (dto))引用了该列。临时表被删除,我只是使用临时表来操作原始表。从中读取的表是具有有效唯一标识符值的原始表,并设置为唯一标识符类型。我在 C# 中将所有相应的值从字符串更改为 Guid,并更新了表中的列。但它似乎没有以某种方式看到它......这就是为什么我很难过。 @DavidBrowne-Microsoft 这是一个基表。 好吧,DataReader 有一个字符串列,您正尝试将其作为 GUID 读取。 【参考方案1】:好吧,我觉得自己很愚蠢。我有三个环境,在一个数据库中进行了更新,但 appsettings 设置为另一个。
无视。对不起。
【讨论】:
以上是关于Microsoft.Data.SqlClient.SqlBuffer 无法将“System.String”类型的对象转换为“System.Guid”类型的主要内容,如果未能解决你的问题,请参考以下文章
如何修复此错误:Microsoft.Data.SqlClient.SqlException (0x80131904): Invalid column name 'NormalizedEmail' 等
Microsoft.Data.SqlClient.SqlBuffer 无法将“System.String”类型的对象转换为“System.Guid”类型
这种情况一直在发生 - 在 Visual Studio 2019 中的 .NET Core 3.1 调试会话期间找不到 Microsoft.Data.SqlClient.resources.dll