You need to enable JavaScript to run this app. Entity Framework Core批量插入提示找不到Guid数据类型如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

Entity Framework Core批量插入提示找不到Guid数据类型如何解决?

问题根本原因
  1. SQL Server 中不存在名为Guid的原生数据类型,C# 的Guid类型在 SQL Server 中对应的存储类型是UNIQUEIDENTIFIER。你在模型配置中通过typeof(Guid).Name指定列类型,拿到的是C# 层面的类型名Guid,属于错误的配置。
  2. 单条插入时,EF 生成的是普通单条INSERT语句,只会传递参数值,不会显式引用你配置的错误类型名,EF 内部默认的Guid到UNIQUEIDENTIFIER的映射规则正常生效,因此不会报错。
  3. 批量插入时,EF 会生成基于表值参数的批量插入SQL,需要先声明临时表变量的结构,这一步会直接使用你配置的Guid作为列类型,SQL Server 无法识别该类型,因此抛出报错。
  4. 注释掉Id的配置后,EF 会启用默认类型映射规则,自动把C#的Guid映射为SQL Server的UNIQUEIDENTIFIER,因此所有操作恢复正常。其他相似表没有报错,要么是没有配置错误的列类型,要么是未触发批量插入的表值参数生成逻辑。
解决方案
  • 方案1:直接删除Id属性的HasColumnType配置即可,EF 默认的类型映射已经可以正确匹配C# Guid和SQL Server UNIQUEIDENTIFIER,无需手动指定。
  • 方案2:如果需要显式声明列类型,把HasColumnType的参数改为SQL Server对应的合法类型名:
entity.Property(e => e.Id) 
  .HasColumnName("Id")
  .HasColumnType("UNIQUEIDENTIFIER");

额外提示:你当前给Name属性配置的HasColumnType(typeof(string).Name)也存在同样的问题,拿到的是C#层面的String类型名,和SQL Server的NVARCHAR不匹配,建议同步修改或者直接删除该配置,避免后续触发字符串批量插入场景时出现同类报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 07:45:04