数据库生成的唯一字符串注释不起作用
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 个字符,但你不会知道它是否是唯一的。您必须手动验证。
我有一个通过迁移维护的 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 个字符,但你不会知道它是否是唯一的。您必须手动验证。