我有一个带有 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 注释是否错误?
答案 0 :(得分:0)
你可能会错过一步。
当我添加迁移时,ef core 会生成一个迁移文件。然后需要在此处添加 defaultValueSql: "newsequentialid()"
。
执行 Update-Database
后,我可以使用 RawSQL 插入记录。
编辑:
另一种在 DbContext 中使用 HasDefaultValueSql
的方法。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Employee>()
.Property(b => b.employee_id)
.HasDefaultValueSql("newsequentialid()");
}