我正在使用Entity Framework 6和MySQL,似乎MySQL不支持行版本的字节数组。请问如何实现此功能。
[Column(TypeName = "timestamp")]
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime TimeStamp { get; set; }
我正在使用Entity Framework 6和MySQL,似乎MySQL不支持行版本的字节数组。请问如何实现此功能。
[Column(TypeName = "timestamp")]
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime TimeStamp { get; set; }
[Timestamp]
public DateTime TimeStamp { get; set; }
[ConcurrencyCheck]
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime TimeStamp { get; set; }
DateTime
值进行乐观锁定,由于Oracle MySQL驱动程序中精度丢失的原因,可能会失败。已经有错误报告关于这个问题,而他们显然拒绝修复。
更新: 我刚刚提交了一个MySQL .NET连接器v6.9.10的PR, 为此问题提供了解决方案,可以在EF和非EF应用程序之间提供乐观锁定。请参见https://stackoverflow.com/a/50147396/365261以获取更多详细信息。rowversion BIGINT NOT NULL DEFAULT 0,
CREATE TRIGGER `trg_mytable_before_update`
BEFORE UPDATE ON `mytable`
FOR EACH ROW SET NEW.`rowversion` = OLD.`rowversion` + 1;
CREATE TRIGGER `trg_mytable_before_update`
BEFORE UPDATE ON `mytable`
FOR EACH ROW SET NEW.`rowversion` = FLOOR(1 + RAND() * POW(2,54));
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
[ConcurrencyCheck]
[Column("rowversion", TypeName = "bigint")]
public virtual long RowVersion { get; set; }
public DateTime RowVersion { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<YourClass>()
.Property(c => c.RowVersion)
.HasColumnType("datetime(3)")
.IsRequired()
.IsRowVersion();
}