【发布时间】:2016-05-23 08:22:51
【问题描述】:
我有一张这样的桌子:
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 时,首先通过 DB 更新模型总是将 LastModified 列设置为 StoreGeneratedPattern = None。
当我在此表中插入一条记录时,LastModified 列始终为 0 - 因为 .NET 中的默认值 System.DateTime = 0。当我更新记录时,其 LastModified 值随后更新为根据需要CURRENT_TIMESTAMP。
我找到了两个可以用作解决方法的选项:
- 手动更改 StoreGeneratedPattern = 'Computed'。当我们更改架构时,它总是会被覆盖(目前每天都是如此!)
- 将列设置为允许
NULL,然后在EF中插入时将LastModified的值显式设置为null。
正如您所见,这两种方法都需要一些思考才能记住做某事 - 可惜它已经被遗忘了。
我也尝试使用 OnModelCreating() 来强制此列的 Computed 属性,但它似乎不起作用。
从数据库更新模型时,EF/MySQL 连接器是否可以正确识别 LastModified 列为 Computed?
【问题讨论】:
标签: mysql .net entity-framework timestamp