首页 > 解决方案 > 在抽象基类中生成的 EF Core GUID 数据库

问题描述

所以我的实体继承自这样的类:

public abstract class EntityBase
{
  [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
  public Guid UuId { get; set; }

  [Key]
  [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
  public int Id { get; set; }

  [Timestamp]
  public byte[] RowVersion { get; set; }
}

Id 字段工作正常,任何插入的KeyUuid 始终为NULL. 我试过添加:

builder.Entity<Series>().Property(x => x.UuId).ValueGeneratedOnAdd();

不工作。

自从添加以来,[DatabaseGenerated(DatabaseGeneratedOption.Identity)]我已经尝试创建和应用新的迁移。

这也行不通。

我尝试将其添加到我的EntityBase课程中:

public Guid UuId { get; set; } = Guid.Empty;

正如这里的文档所说:

如果没有为属性分配 CLR 默认值(字符串为 null,int 为 0,Guid 为 Guid.Empty,等等),则认为该属性已分配了一个值。

我错过了什么?我怎样才能让这个自动生成工作?

标签: entity-frameworkef-code-firstentity-framework-migrationsef-core-2.0

解决方案


因此,经过反复试验,唯一可行的解​​决方案是:

builder.Entity<Series>().Property(x => x.UuId).HasDefaultValueSql("NEWID()");

即使 EF Core 的文档不建议这样做。除非我错过了什么。


推荐阅读