C# Data Seeding报错CS0029:无法将string隐式转换为System.DateTime
EF Core数据种子DateTime字段赋值报CS0029错误解决方案
错误根因
编译错误Cannot implicitly convert type 'string' to 'System.DateTime' [MessageBoard]csharp(CS0029)是典型的类型不匹配问题:
- 你的
Message实体中Date属性声明为DateTime值类型 - 你在
HasData初始化器中给Date传入的是双引号包裹的字符串类型值 - C# 不支持
string到DateTime的隐式类型转换,因此直接编译失败
额外注意:你第一条种子数据写的
"19//03//2013T18:06"不符合通用时间字符串格式,即便做显式转换也会触发运行时格式错误。
修复方案
方案1:直接使用DateTime构造函数赋值(推荐,无解析风险)
直接通过DateTime的构造函数按「年、月、日、时、分、秒」传值,编译期即可校验参数合法性,完全规避字符串解析的格式问题,修正后完整代码如下:
protected override void OnModelCreating(ModelBuilder builder) { builder.Entity<Message>() .HasData( new Message { MessageId = 1, Description = "This is a test message", Group = "TEST", Date = new DateTime(2013, 3, 19, 18, 6, 0), Author = "Mark" }, new Message { MessageId = 2, Description = "This is a test message", Group = "TEST 1", Date = new DateTime(2022, 1, 1, 10, 10, 10), Author = "Mark" }, new Message { MessageId = 3, Description = "This is a test message", Group = "TEST", Date = new DateTime(2022, 1, 1, 10, 10, 10), Author = "Mark" }, new Message { MessageId = 4, Description = "This is a test message", Group = "TEST 1", Date = new DateTime(2022, 1, 1, 10, 10, 10), Author = "Jack" }, new Message { MessageId = 5, Description = "This is a test message", Group = "Test", Date = new DateTime(2022, 1, 1, 10, 10, 10), Author = "Jack" } ); }
方案2:显式解析时间字符串
如果确实需要用字符串形式赋值,必须调用DateTime的显式解析方法做类型转换。比如你写的ISO8601标准格式时间串"2022-01-01T10:10:10"可以直接用DateTime.Parse转换:
Date = DateTime.Parse("2022-01-01T10:10:10")
如果要解析非标准格式的时间串,需要用DateTime.ParseExact手动指定匹配的格式字符串,否则会抛出运行时格式异常。
内容的提问来源于stack exchange,提问作者NWclimber
相关产品推荐
相关产品推荐

