【问题标题】:DBFirst - Using MySQL Connector and EF6, How to recognize timestamp columns as StoreGeneratedPattern = Computed?DBFirst - 使用 MySQL 连接器和 EF6,如何将时间戳列识别为 StoreGeneratedPattern = Computed?
【发布时间】: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

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

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

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

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

从数据库更新模型时,EF/MySQL 连接器是否可以正确识别 LastModified 列为 Computed

【问题讨论】:

    标签: mysql .net entity-framework timestamp


    【解决方案1】:

    我已经离开 MySQL 和 EF - 它的实现有一些小问题,尤其是在使用异步实现时,如 ToListAsync()FirstOrDefaultAsync() 等。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-26
      • 2019-09-28
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      相关资源
      最近更新 更多