我有一张这样的表:
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.当我更新记录时,{{1}然后根据需要将值更新为LastModified
。
我找到了两个可以用作解决方法的选项:
CURRENT_TIMESTAMP
,然后在插入EF时将NULL
的值显式设置为null。正如你所看到的,这两种方法都需要一些思考来记住做某事 - 而且它已经被遗忘了。
我还尝试使用OnModelCreating()强制使用此列的LastModified
属性,但它似乎无法正常工作。
从数据库更新模型时,EF / MySQL连接器是否可以正确识别Computed
列为LastModified
?
答案 0 :(得分:0)
我已经离开了MySQL和EF--它的实现存在一些小问题,特别是在使用ToListAsync()
,FirstOrDefaultAsync()
等异步实现时。
如果有人沿着这条路走下去,请记住,当它出现时#39;为了工作,我认为它不够稳定,奇怪的例外,如“只读表”和#39;例如,在EF中使用异步方法时开始显示。
单独使用EF无法实现我的问题(但在SQL Server中也没有)。