是否可以自动增加不是Entity Framework中主键的属性?我所拥有的是一个具有ID但又有序列号的类:
public class Maintenance
{
[Key]
public int ID { get; set; }
public int GroupID { get; set; }
public int SerialNo { get; set; }
}
我的GroupID
和SerialNo
索引具有唯一关系,因此组无法使用相同的序列号两次。
我目前正在检查该群组中.Max()
的{{1}}。如果序列号自动递增,我会喜欢它。这可能吗?
我一直在寻找解决方案,但就我所知,它不可能有2个自动递增列与实体框架,并且自动递增列将始终是PK列。
有没有办法设置自动增量,还是比使用SerialNo
有更好的解决方案?使用Max()
理论上可能会产生2个相同的值,并且会在尝试插入时导致程序崩溃(因为唯一索引)。
我先使用代码。
澄清:我想将ID作为主键,并在插入时计算序列号。
更新:
我尝试在Max()
上使用[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
,导致实体框架想要将主键更改为此属性。我还尝试SerialNo
尝试在[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
列中插入NULL,尝试插入0 SerialNo
,基本上做'没事'。
请求信息:
这是表格外观的一个例子:
[DatabaseGenerated(DatabaseGeneratedOption.None)]
答案 0 :(得分:7)
是的,您可以使用following attribute:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int SerialNo { get; set; }
请参阅HERE以获取可能的数据注释列表。
答案 1 :(得分:1)
如果您使用的是sql server,请仔细阅读
Can we have more than one identity columns in a table.
所以我想下面的代码编译,但在尝试迁移/创建数据库时会给你一个错误。
你也可以像这样使用流利的api approch
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Maintenance>().Property(a => a.GroupID
).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
modelBuilder.Entity<Maintenance>().Property(a => a.SerialNo
).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
}