是否可以自动增加不是实体框架中主键的属性?我所拥有的是一个具有ID,但也有序列号的类:
public class Maintenance { [Key] public int ID { get; set; } public int GroupID { get; set; } public int SerialNo { get; set; } }
我有一个GroupID和SerialNo的索引具有唯一的关系,使得组不可能具有两次相同的序列号.
我目前正在做的是在该组中检查.Max()for SerialNo.如果序列号自动递增,我会喜欢它.这可能吗?
我一直在寻找解决方案,但据我所知,它不可能有2个自动递增列与实体框架,并且自动递增列将始终是PK列.
有没有办法设置自动增量,还是比使用Max()有更好的解决方案?理论上,使用Max()可能会生成2个相同的值,并且会在尝试插入时导致程序崩溃(因为唯一索引).
我先使用代码.
澄清一下:我想将ID保留为主键,并在插入时计算序列号.
更新:
我尝试在SerialNo上使用[DatabaseGenerated(DatabaseGeneratedOption.Identity)],这导致实体框架想要将主键更改为此属性.我也尝试过[DatabaseGenerated(DatabaseGeneratedOption.Computed)],它试图在SerialNocolumn中插入NULL,而[DatabaseGenerated(DatabaseGeneratedOption.None)]试图插入0,基本上做“什么都没有”.
要求的信息:
这是表格外观的一个示例:
|_ID_|_GroupID_|_SerialNo_| | 1 | 1 | 1 | | 2 | 1 | 2 | | 3 | 2 | 1 | | 4 | 1 | 3 | | 5 | 2 | 2 |
解决方法
是的,你可以使用
following attribute:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int SerialNo { get; set; }
有关可能的数据注释的列表,请参见HERE.