如何解决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; } }
排查与解决方案
修正实体类与数据库字段类型匹配
异常核心是类型不匹配:数据库中ProductCarat、ProductTable、ProductDepth、ProductLWR字段类型应为float(对应C#的Single),但实体类用了double。数据能存入是因为数据库做了隐式转换,但EF在后续映射时会抛出异常。- 二选一修正:要么把实体类中这些字段的类型改为
float;要么把数据库对应字段改为double(SQL Server中是float(53))。
- 二选一修正:要么把实体类中这些字段的类型改为
检查视图模型绑定
如果使用了独立的视图模型接收表单数据,确认视图模型中对应字段的类型是否和实体类、数据库一致。比如视图模型用float,实体类用double,绑定后转换时也会触发异常。修正EF映射配置
若手动配置了EF映射,检查是否存在类型映射错误。可通过Fluent API明确指定字段类型:// 若数据库用double类型 modelBuilder.Entity<Product>() .Property(p => p.ProductCarat) .HasColumnType("float"); // 若数据库用float类型 modelBuilder.Entity<Product>() .Property(p => p.ProductCarat) .HasColumnType("real");规避写入后的数据映射环节
数据已存入但报错,说明异常发生在写入后的环节(比如EF保存后返回数据到视图)。可以在Create方法中,保存后直接重定向到产品列表页,跳过当前视图的实体数据绑定,验证是否还会报错,缩小问题范围。
内容的提问来源于stack exchange,提问作者aria_dne
相关产品推荐
相关产品推荐

