You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core查询时出现System.Guid无法转换为System.String错误如何解决

问题根因

1. 父类Entity的主键未正确定义为属性

你当前Entity类中的Id是字段(public Guid Id;),而非C#公共属性。EF Core默认只会映射公共读写属性,不会自动识别字段作为映射对象,这就导致EF无法将Id识别为主键,在读取数据库表中Id列(类型为uniqueidentifier对应C# Guid)时,会错误尝试将该列映射到实体中的字符串类型属性,触发类型转换报错。

2. 潜在映射不匹配问题

如果修复上述问题后仍报错,可确认两个点:

  • 数据库DocumentationPages表的UserId列是否设为了uniqueidentifier类型,但实体中UserId定义为string,导致EF读取该列时尝试将Guid转为string
  • 是否存在自定义实体映射配置,错误绑定了Guid类型列和字符串属性的对应关系

解决方案

第一步:修复Entity类的Id定义

将Id改为公共属性,EF会默认识别名为Id的属性为主键:

public class Entity
{
    public Guid Id { get; set; }
}

第二步:显式标记主键(可选但推荐)

可添加[Key]注解明确标记主键,避免EF映射歧义:

using System.ComponentModel.DataAnnotations;

public class Entity
{
    [Key]
    public Guid Id { get; set; }
}

第三步:校验数据库列类型

核对DocumentationPages表的列类型:

  • Id列必须为uniqueidentifier类型,和C# Guid对应
  • 如果UserId在数据库中存的是Guid格式,要么将实体UserId改为Guid类型,要么将数据库UserId列改为varchar/nvarchar类型存储Guid字符串,保持两边类型一致

第四步:修正异步查询写法

你当前的GetByIdAsync方法使用了同步的FirstOrDefault,不符合异步方法定义,改为EF原生异步方法:

public async Task<DocumentationPage> GetByIdAsync(Guid id)
{
    return await context.DocumentationPages.FirstOrDefaultAsync(c => c.Id == id);
}

内容的提问来源于stack exchange,提问作者Rowin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:06:03