我有一个像这样的表:
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
。
我找到了两个可以用作解决方法的选项:
- 手动更改 StoreGeneratePattern = 'Compulated'。当我们更改架构时,它总是会被覆盖(目前每天都是这样!)
- 将列设置为允许
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/