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

如何解决System.Double转System.Single类型转换未处理异常?

问题描述

创建新产品时触发未处理异常:无法将System.Double类型转换为System.Single类型。点击创建按钮时出现该错误,但产品数据已成功存入数据库。附数据库表截图、数据存入截图及C# Product实体类代码,求解决。


Product实体类代码
public partial class Product
{
    [Key]
    public int ProductId { get; set; }

    [Required]
    [DisplayName("Product Image")]
    public string? ProductImage { get; set; }

    [Required]
    [DisplayName("Product Name")]
    public string? ProductName { get; set; }

    [Required]
    [DisplayName("Serial Number")]
    public string? ProductSerialNo { get; set; }

    [Required]
    [DisplayName("Product Description")]
    public string? ProductDescription { get; set; }

    [Required]
    [DisplayName("Product Price")]
    public int ProductPrice { get; set; }

    [Required]
    [DisplayName("Product Shape")]
    public string? ProductShape { get; set; }

    [Required]
    [DisplayName("Product Carat")]
    public double ProductCarat { get; set; }

    [Required]
    [DisplayName("Product Cut")]
    public string? ProductCut { get; set; }

    [Required]
    [DisplayName("Product Color")]
    public string? ProductColor { get; set; }

    [Required]
    [DisplayName("Product Clarity")]
    public string? ProductClarity { get; set; }

    [Required]
    [DisplayName("Product Polish")]
    public string? ProductPolish { get; set; }

    [Required]
    [DisplayName("Product Symmetry")]
    public string? ProductSymmetry { get; set; }

    [Required]
    [DisplayName("Product Fluorescence")]
    public string? ProductFluo { get; set; }

    [Required]
    [DisplayName("Product Table")]
    public double ProductTable { get; set; }

    [Required]
    [DisplayName("Product Depth")]
    public double ProductDepth { get; set; }

    [Required]
    [DisplayName("Product Culet")]
    public string? ProductCulet { get; set; }

    [Required]
    [DisplayName("Product Length/Width Ratio")]
    public double ProductLWR { get; set; }

    [Required]
    [DisplayName("Product Remarks")]
    public string? ProductRemarks { get; set; }
}

排查与解决方案
  1. 修正实体类与数据库字段类型匹配
    异常核心是类型不匹配:数据库中ProductCarat、ProductTable、ProductDepth、ProductLWR字段类型应为float(对应C#的Single),但实体类用了double。数据能存入是因为数据库做了隐式转换,但EF在后续映射时会抛出异常。

    • 二选一修正:要么把实体类中这些字段的类型改为float;要么把数据库对应字段改为double(SQL Server中是float(53))。
  2. 检查视图模型绑定
    如果使用了独立的视图模型接收表单数据,确认视图模型中对应字段的类型是否和实体类、数据库一致。比如视图模型用float,实体类用double,绑定后转换时也会触发异常。

  3. 修正EF映射配置
    若手动配置了EF映射,检查是否存在类型映射错误。可通过Fluent API明确指定字段类型:

    // 若数据库用double类型
    modelBuilder.Entity<Product>()
        .Property(p => p.ProductCarat)
        .HasColumnType("float");
    
    // 若数据库用float类型
    modelBuilder.Entity<Product>()
        .Property(p => p.ProductCarat)
        .HasColumnType("real");
    
  4. 规避写入后的数据映射环节
    数据已存入但报错,说明异常发生在写入后的环节(比如EF保存后返回数据到视图)。可以在Create方法中,保存后直接重定向到产品列表页,跳过当前视图的实体数据绑定,验证是否还会报错,缩小问题范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 05:17:22