如何向含DateTime类型列的SQL Server表插入当前日期时间并解决转换报错
问题原因
你遇到的报错是因为AppUser类的creationDate属性加了不适用的[MaxLength(100)]数据注解。MaxLength特性仅支持校验字符串、数组、集合类型的长度,无法作用于DateTime值类型,所以触发了类型转换异常。
解决方案
- 第一步:直接删除
creationDate属性上的[MaxLength(100)]注解即可,原有的[DataType(DataType.DateTime)]注解可以保留,用于前端渲染时的类型识别。 - 第二步:如果需要明确指定SQL Server中对应字段的存储类型,可以额外添加列类型注解,示例如下:
[Display(Name = "Creation date")] [DataType(DataType.DateTime)] [Column(TypeName = "datetime2")] // 对应SQL Server的datetime2类型,兼容所有DateTime值 public DateTime creationDate { get; set; }
- 额外说明:你原有的赋值逻辑
DateTime.Now不需要做任何格式转换,EF Core会自动完成DateTime类型到SQL Server日期类型的映射,无需手动处理格式。如果需要避免时区导致的时间偏差,建议改用DateTime.UtcNow存储UTC时间,前端展示时再转换为用户所在时区的时间即可。
内容的提问来源于stack exchange,提问作者user17525129
相关产品推荐
相关产品推荐

