mysql - DBFirst - 使用 MySQL Connector 和 EF6,如何将时间戳列识别为 StoreGeneratePattern = 已计算?

标签 mysql .net entity-framework timestamp

我有一个像这样的表:

CREATE TABLE `incidentdata` (
  `IncidentDataID` int(11) NOT NULL AUTO_INCREMENT,
  `GUID` binary(16) NOT NULL,
  `LastModified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `Incident_ID` int(11) NOT NULL,
  `Parameter_ID` int(11) NOT NULL,
  `Value` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`IncidentDataID`),
  UNIQUE KEY `GUID_UNIQUE` (`GUID`),
  KEY `FK_INCDATA_INC` (`Incident_ID`),
  KEY `FK_INCDATA_PAR` (`Parameter_ID`),
  CONSTRAINT `FK_INCDATA_INC` FOREIGN KEY (`Incident_ID`) REFERENCES `incidents` (`IncidentID`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `FK_INCDATA_PAR` FOREIGN KEY (`Parameter_ID`) REFERENCES `eventparameters` (`ParameterID`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$

使用 EF 6、MySQL Connector 6.9.8 和 MySQL 5.5.21 时,首先通过数据库更新模型始终将 LastModified 列设置为 StoreGeneratePattern = None

当我在此表中插入记录时,LastModified 列始终为 0 - 因为 .NET 中 System.DateTime 的默认值 = 0。当我更新时该记录的 LastModified 值随后会根据需要更新为 CURRENT_TIMESTAMP

我找到了两个可以用作解决方法的选项:

  1. 手动更改 StoreGeneratePattern = 'Compulated'。当我们更改架构时,它总是会被覆盖(目前每天都是这样!)
  2. 将列设置为允许 NULL,然后在 EF 中插入时将 LastModified 的值显式设置为 null。

正如您所看到的,这两种方法都需要一些思考才能记住做某事 - 可惜它已经被忘记了。

我还尝试使用 OnModelCreating() 强制此列的 Compulated 属性,但它似乎不起作用。

当从数据库更新模型时,EF/MySQL 连接器是否可以正确识别要计算LastModified列?

最佳答案

我已经不再使用 MySQL 和 EF - 它的实现中存在一些小问题,特别是在使用诸如 ToListAsync()FirstOrDefaultAsync() 等异步实现时。

如果有人走这条路,请记住,虽然它“似乎”正常工作,但我认为它不够稳定,并且例如在使用时开始显示“只读表”之类的奇怪异常EF 中的异步方法。

没有办法单独使用 EF 来解决我的问题(但在 SQL Server 中也没有)。

关于mysql - DBFirst - 使用 MySQL Connector 和 EF6,如何将时间戳列识别为 StoreGeneratePattern = 已计算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37386032/

相关文章:

c# - Entity Framework Core "The entity type ' XXX'需要定义主键。”

mysql - SQL语句返回格式错误

php - geoip zip 查询

php - 用户角色(例如管理员、用户)进入表而不是用户名

javascript - 检查行是否已被解析并插入到 mysql 数据库中

.net - .NET 将如何影响 Python 和 Ruby 应用程序?

c# - 如何在启用视觉样式的情况下将控件呈现为看起来像 ComboBox?

.net - 菜单项触发器不工作

entity-framework - 没有导航属性的 EF Code First 外键

c# - Entity Framework - 为什么 EF 在 1 对 1 关系中使用 LEFT OUTER JOIN?