数据库生成的唯一字符串注释不起作用

DatabaseGenerated unique string annotation not working

我有一个通过迁移维护的 Entity Framework 6 Code-First 数据库。我的实体A是这样的:

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

    [DataMember]
    [StringLength(100)]
    public string Name { get; set; }

    [DataMember]
    [StringLength(6)]
    [Index(IsUnique = true)]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public string Code { get; set; }
}

我希望数据库在插入新的 A 对象时自动使用唯一代码填充代码字段,而不用担心竞争条件。

但是,当我尝试在填充数据库时添加新的 A { Name = "a1" } 条目时,数据库抱怨我 Cannot insert the value NULL into column 'Code', table 'A'; column does not allow nulls. INSERT fails..

如果我尝试添加 A { Name = "a1", Code="abcdef" },错误是相同的。 "solve" 的唯一方法是删除 "DatabaseGenerated" 注释。

我做错了什么?不可能有 db 生成的唯一字符串,就像目前 int ID 发生的那样?

提前致谢。

数据库中只能有 1 个 AutoGenerated 字段 table,并且必须是整数类型(即 int、bigint)。字符串不能像那样自动生成。如果你想在这里有一些独特的东西,只需将 UniqueIdentifier 或 GUID 作为字段类型而不是字符串,你就可以在代码中为其分配一个新的 Guid。如果你希望它具体是一个字符串,使用一个 new Random() class 来生成一个随机的 6 个字符,但你不会知道它是否是唯一的。您必须手动验证。