我将日期时间以UTC格式(使用DateTime.UtcNow)存储在MySQL数据库中。在对包含该日期的实体进行一些操作之后,它变得一团糟。

这是我定义表格的方式:

CREATE TABLE `gsrep`.`GlobalVersion` (

[..],

`CreationDate` TIMESTAMP NOT NULL,

`LastUpdateDate` TIMESTAMP NOT NULL,

[..]

);

我正在运行.NET 4.5.2框架,并使用Entity Framework 6和Database first原理映射了数据库。

这是我在做什么:

第一步,创建对象:

var now = DateTime.UtcNow;

var globalVersion = new GlobalVersion

{

CreationDate = now,

LastUpdateDate = now

};

// saving the object

假设它是我国家的10:00 am,而我是GMT +2。创建的日期的Kind属性设置为DateTimeKind.Utc,其值设置为08h00 am。在数据库中,日期值为08:00 am。

一切顺利。

第二步,获取对象:

使用另一个连接,当我从数据库中获取对象时,日期设置为上午08:00,但其Kind属性设置为DateTimeKind.Local。

这不是完全可以的,但是虽然我只读取数据,但这不是问题。我什至没有注意到它,直到我需要更改一个日期。

更新一个日期:

一团糟。在一瞬间,我只需要更改一个日期。假设现在在我的国家/地区是11:00 am。

// getting the object

globalVersion.LastUpdateDate = DateTime.UtcNow;

// saving the object

保存后,LastUpdateDate在数据库中设置为09:00 am(可以),但CreationDate现在设置为... 11:00 am。看起来它在DbContext.SaveChangesAsync()处设置为DateTime.Now(我说这是因为如果在调试期间在DateTime.UtcNow和SaveChangesAsync指令之间暂停,则CreationDate会设置为单击继续的那一刻)。

我的代码中绝对没有任何东西可以更改CreationDate ...在调用DbContext.SaveChangesAsync()之前,CreationDate具有不变的期望值。紧接着,CreationDate设置为我单击"继续"的那一刻(仅在数据库中,在EF缓存中,该值仍然相同,但是在下一次连接时,如果将在数据库中使用该值)。

我对这种行为完全迷失了……是什么原因引起的?

我正在SQLite数据库中并行编写相同的操作(我在连接字符串中将DateTimeKind设置为Utc,但没有问题)。

根据您的描述,听起来好像EF在检索时忽略了mysql时间戳的UTC偏移,然后甚至更新了您未更改的字段。 可能的提示:stackoverflow.com/questions/6931014/

@joshp链接中提供的解决方案可修复DateTime.Kind,但在SaveChangesAsync期间仍会覆盖CreationDate ...

哇...虽然我正在用此脚本创建表:

CREATE TABLE `gsrep`.`GlobalVersion` (

[..],

`CreationDate` TIMESTAMP NOT NULL,

`LastUpdateDate` TIMESTAMP NOT NULL,

[..]

);

MySQL Workbench(或MySQL?)实际上创建了一个这样的表(使用MySQL Workbench逆向工程获取它):

CREATE TABLE `GlobalVersion` (

[..],

`CreationDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

`LastUpdateDate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',

[..]

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

实体框架自己更新CreationDate毫无意义。 最后,这与DateTimeKind问题无关。 为了解决该问题,我遵循了joshp链接中提出的解决方案,但进行了一些改进。

ef mysql 时间_关于c#:EF6和MySQL时区支持相关推荐

  1. linux mysql怎么样_最强Linux和Mysql面试题套餐,让你的面试无懈可击!

    引言: 大家好,我是一菲,在软件测试当中linux 操作系统和Mysql数据库的内容是十分的知识同时也是十分重要的.所以一菲这两天通过查阅资料等其他方式为大家梳理了liunx和Mysql面试题大礼包, ...

  2. 宝塔mysql优化_宝塔面板下实现MySQL性能优化处理

    在PHP+MYSQL架构网站运行过程中,往往会遇到各种性能问题影响,如MySQL.PHP.CPU.磁盘IO.缓存等,其中MySQL瓶颈就是最常见也最难解决的一种影响网站性能的因素:通常,我们会使用re ...

  3. win7 mysql 密码_笔记本win7系统下mysql忘记密码的最佳解决方法

    MySQL是一个关系型数据库管理系统,在笔记本win7系统下编程的时候就需要用到MySQL数据库,不过有时候一段时间没用的话,可能会忘记数据库的登录密码了,当忘记密码就无法进入mysql,要如何解决呢 ...

  4. 定义mysql日志_请教:如何查看mysql数据定义操作的日志

    展开全部 一.错误日志 错误日志在e69da5e887aa3231313335323631343130323136353331333363366164Mysql数据库中很重要,它记录着mysqld启动 ...

  5. swoole mysql 连接数_用swoole简单实现MySQL连接池

    MySQL连接池 在传统的网站开发中,比如LNMP模式,由Nginx的master进程接收请求然后分给多个worker进程,每个worker进程再链接php-fpm的master进程,php-fpm再 ...

  6. 理解mysql服务_我所理解的MySQL(一)基础架构

    你好,有幸相见. 从九月开始,我决定发起「每周一博」的目标:每周至少发布一篇博客,可以是各种源码分析研读,也可以是记录工作中遇到的难题. 在经过了一段时间漫无目的的学习之后,我发现那样用处好像不大,看 ...

  7. 传智播客mysql视频_传智播客mysql高清视频教程(41集)

    本套课程为传智播客mysql高清视频教程,全套课程有41讲,是mysql入门的优质教材,随着mysql不断发展,现在使用mysql+php做网站已成为主流,如果你想学习动态网页设计,那么建议你选择ph ...

  8. 一个机器能装两个mysql吗_一个机器安装多个mysql

    /home/setup/mysql-5.0.96 grep config config.status :查看mysq的编译参数 './configure'  '–prefix=/usr/local/m ...

  9. java 插入 mysql 乱码_解决java中插入mysql中文乱码的方法

    解决java中插入mysql中文乱码的方法 发布时间:2020-07-11 14:35:11 来源:亿速云 阅读:100 作者:清晨 这篇文章主要介绍解决java中插入mysql中文乱码的方法,文中介 ...

  10. cmd mysql 数据分析_小白学数据分析--与MySQL有关的小知识

    放在这个专题下,是因为有时候我们数据分析师的确是懂得一点数据库的操作知识或者会一些SQL,平时我用的比较多的就是MySQL,如果说我们一般就是要学一些SQL操作的话,可能就足以应付平时的工作,至于对象 ...

最新文章

  1. java 初识对象和对象引用的关系
  2. 求1+2+3+…+n
  3. QIIME 2教程. 31名词Glossary(2020.11)
  4. 校园导游系统c语言代码,GitHub - iamywang/Campus-Guide-System: 校园导游系统
  5. PE学习(六)第六章 栈与重定位表 实例栈溢出、模拟加载器加载DLL、遍历重定位表
  6. 抓rtmp推流地址_如何实现摄像机竖屏直播推流?
  7. SAP CRM系统里关于订单货币单位为日元的一些调试和配置关键点
  8. 同步工具之CountDownLatch闭锁
  9. Android数据库一些源码分析
  10. 讲真,WiFi 6到底6在哪儿
  11. 有关Ajax实现的两种方法
  12. PHP视频网站源码 带APP源代码 支持FFMPEG
  13. STM32F1系列简单介绍及入门学习
  14. EPSG和WKID空间参考之--坐标系简单理解
  15. java运行环境搭建_java的运行环境
  16. 741. 斐波那契数列
  17. java http 手机浏览器下载word文档失败的问题
  18. 华为血压表WATCH D测量血压的数据可靠吗
  19. 华为mate9安装Fiddler证书
  20. 提交BlackBerry App World时候填写的SKU是什么?

热门文章

  1. 行为型模式:策略模式
  2. 【Python】青少年蓝桥杯_每日一题_12.11_开关灯问题
  3. 计算机排版高级理论知识试卷,2017年9月计算机二级考试《MS Office高级应用》操作题强化提分卷(1)...
  4. 什么是工装服_王俊凯穿连体工装亮相跨年晚会,中国风满满的设计,尽显帅气...
  5. vant coupon 时间戳如何计算_计软考研双日练 | 如何计算拓扑排序算法的时间复杂度?...
  6. java pdf添加图片_java实现在pdf模板的指定位置插入图片
  7. bi导入数据失败 power_会商业智能BI的人,做的报表都比别人好看
  8. 数据中心实现高效运维的秘诀
  9. CV:计算机视觉基础之图像存储到计算机的原理daiding
  10. DL之FAN:FAN人脸对齐网络(Face Alignment depth Network)的论文简介、案例应用之详细攻略