我有一个通过迁移维护的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会发生吗?
提前谢谢。
答案 0 :(得分:0)
数据库表上只能有1个AutoGenerated字段,它必须是整数类型(即int,bigint)。字符串不能像这样自动生成。如果你想要一些独特的东西,只需要将UniqueIdentifier或GUID作为字段类型而不是字符串,你可以在代码中为它分配一个新的Guid。如果你想要它专门成为一个字符串,使用一个新的Random()类来生成一个随机的6个字符,但你不知道它是否是唯一的。您必须手动验证。