DatabaseGenerated唯一字符串注释无效

时间:2017-03-31 11:27:31

标签: ef-code-first entity-framework-6 ef-migrations

我有一个通过迁移维护的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" },则错误是相同的。 解决问题的唯一方法是#34;它是删除" DatabaseGenerated"注释

我做错了什么?不可能有db生成的唯一字符串,因为目前int ID会发生吗?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

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