.net core3.1下使用EFCore不能将datetime插入数据库解决办法

[软件开发] 季雨林 2021/5/22 11:33:08

初次接触.net core ,虽然感觉大部分东西跟.net freamwork 相差不太大,但依然遇到一些问题,网上几乎搜索不到有效答案。尝试反复更换不同关键字去搜,得到的结论始终还是那么几篇文章,甚至还是被抄来抄去的那种。所以最终就需要靠自己去摸索原因,看数据库写入相关的代码。这次遇到的以问题是:.net core3.1下,使用 Pomelo.EntityFrameworkCore.MySql  不能向mysql8.0数据库插入datetime。


解决过程真的是有些曲折:文章来源:https://www.opengps.cn/Blog/View.aspx?id=896

1,发现问题:
刚开始开发完成,松了一口气,突然发现数据库里所有的datetime都不是准确的时间,除了数据库设置了默认值的addtime列之外其他列都是空的。


2,尝试找原因:
通过日志输出,增加了调试工具把EF的生成sql输出到控制台,发现居然生成的sql语句干脆不包含datetime字段,这tm。。。


3,尝试解决方案1:
从数据库datetime换成timeteamp,发现问题依旧


4,尝试解决方案2:
不再使用datetime字段,用varchar类型存时间字符串。这个方案因为不是个长期通用办法,甚至会出现第三方共享数据库的话会出现新的问题,遂作为无奈之举,临时尝试可用,但是不适合长久使用。


5,最终解决:
通过观察默认生成的xxxxxContext.cs中,在表结构的datetime类型字段里,是这么写的一段:

entity.Property(e => e.TestDatetime)
    .HasColumnType("datetime")
    .ValueGeneratedOnAddOrUpdate();

这段自动生成的代码,就是问题所在,其中导致无法写入值的问题就在这个“ValueGeneratedOnAddOrUpdate()”,我在这个文件里做了全文删除“ValueGeneratedOnAddOrUpdate()”字符,终于解决问题,又可以轻松的使用EF写入数据库了。


最后总结:文章来源:https://www.opengps.cn/Blog/View.aspx?id=896

这个问题从第一天下午发现,到第二天下午解决,相对来说还算顺利。对于.net core这种快速发展更新的技术,网上能参考的资料可能真的很少,很多代码从之前的环境移植过来,会出现一些新的问题,所以需要自己去熟悉一些底层的原理,去读一些自己平常不怎么看的代码,才能更容易发现问题所在。


原文地址: https://www.opengps.cn/Blog/View.aspx?id=896 文章的更新编辑依此链接为准。欢迎关注源站原创文章!

评论

暂无评论!

发表评论:

用于接收作者回复信息
点击更换验证码 - openGPS提示