EF Core 3.1 中的 RawSQL 和自动生成的键

时间:2021-01-13 08:59:05

标签: sql sql-server asp.net-core entity-framework-core

我有一个带有 Guid 主键的模型。我希望数据库在插入时生成一个键,所以我添加了以下注释:

tID.get()

现在我预计使用 RawSQL 的插入不会期望主键,但是通过 public class Employee { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Guid employee_id { get; set; } [Required] public int employee_number { get; set; } //more props... } 执行时以下语句不起作用:

ExecuteSqlRaw

错误是由数据库引起的关于不可为空的主键。显式插入一些随机 Guid 工作,但我认为 DB 会处理这个。

Identity 注释是否错误?

1 个答案:

答案 0 :(得分:0)

你可能会错过一步。

当我添加迁移时,ef core 会生成一个迁移文件。然后需要在此处添加 defaultValueSql: "newsequentialid()"

enter image description here

执行 Update-Database 后,我可以使用 RawSQL 插入记录。

enter image description here

编辑:

另一种在 DbContext 中使用 HasDefaultValueSql 的方法。

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        
        modelBuilder.Entity<Employee>()
           .Property(b => b.employee_id)
           .HasDefaultValueSql("newsequentialid()");
    }