我正在使用ASP.NET核心创建代码优先的WebAPI。 我想定义一个UUID/GUID Pk类型为BINARY(16)的表,这个表最好是自动生成的,类似于auto_increment,在auto_increment中插入列的其余部分,Db自动填充Pk/id。
我曾尝试在Db生成之后为字段创建一个触发器,以用UUID填充Pk,但它不允许我使用UUID()。
无论如何,下面是我要填充的表的示例:dbcontext.cs
ModelBuilder.Entity<Customers>(entity =>
{
entity.HasKey(e => e.CustomerId)
.HasName("PRIMARY");
entity.ToTable("customers");
entity.HasIndex(e => e.CustomerId)
.HasName("customer_id_UNIQUE")
.IsUnique();
entity.Property(e => e.CustomerId)
.HasColumnName("customer_id")
.HasColumnType("BINARY(16)");
}
使用pomelo.EntityFrameworkCore.MySQL(如果有什么不同的话)。
我知道。NET中有一个GUID()函数,但我不知道如何让MySql自动生成它。 我试着想出了许多解决方案,但没有结果,我试着使用存储过程,ValueGenerator等。
请提供任何建议,代码或指针,你可能知道,因为这是非常令人沮丧的我,因为我会说我是一个初学者。
非常感谢!
向列添加DataAnnotations
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid CustomerId { get; set; }
在迁移过程中,应更改CreateTable以将defaultValueSQL属性添加到列中:
CustomerId = c.Guid(nullable: false, identity: true, defaultValueSql: "NEWID()")
或fluent API:
entity.Property(x => x.CustomerId).HasDefaultValueSql("NEWID()");
我希望这能帮到你。
ModelBuilder.Entity<Customers>(entity =>
{
entity.HasKey(e => e.CustomerId)
.HasName("PRIMARY")
.HasComputedColumnSql("SELECT UUID()");
entity.ToTable("customers");
entity.HasIndex(e => e.CustomerId)
.HasName("customer_id_UNIQUE")
.IsUnique();
entity.Property(e => e.CustomerId)
.HasColumnName("customer_id")
.HasColumnType("BINARY(16)");
}