自动增量属性不是键

Rob*_*ell 6 c# entity-framework ef-code-first

是否可以自动增加不是实体框架中主键的属性?我所拥有的是一个具有ID但也是序列号的类:

public class Maintenance
{
    [Key]
    public int ID { get; set; }
    public int GroupID { get; set; }
    public int SerialNo { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

我有一个索引,GroupID并且SerialNo具有唯一的关系,使得组不可能具有两次相同的序列号.

什么我目前做的是检查.Max()SerialNo该组中.如果序列号自动递增,我会喜欢它.这可能吗?

我一直在寻找解决方案,但据我所知,它不可能有2个自动递增列与实体框架,并且自动递增列将始终是PK列.

有没有办法设置自动增量,还是有比使用更好的问题解决方案Max()Max()理论上,使用可能会产生两个相同的值,并且会在尝试插入时导致程序崩溃(因为唯一索引).

我先使用代码.

澄清一下:我想将ID保留为主键,并在插入时计算序列号.

更新:

我已经尝试使用[DatabaseGenerated(DatabaseGeneratedOption.Identity)]SerialNo,这导致想改变主键此属性的实体框架.我也试过[DatabaseGenerated(DatabaseGeneratedOption.Computed)],试图在SerialNo列中插入NULL ,并[DatabaseGenerated(DatabaseGeneratedOption.None)]尝试插入0,基本上做"什么都没有".

要求的信息:

这是表格外观的一个示例:

|_ID_|_GroupID_|_SerialNo_|
|  1 |    1    |    1     |
|  2 |    1    |    2     |
|  3 |    2    |    1     |
|  4 |    1    |    3     |
|  5 |    2    |    2     |
Run Code Online (Sandbox Code Playgroud)

Chr*_*Fin 7

是的,您可以使用以下属性:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int SerialNo { get; set; } 
Run Code Online (Sandbox Code Playgroud)

请参阅此处获取可能的数据注释列表.

  • 嗨,谢谢你的链接.这将非常有帮助.使用`DatabaseGenerationOption.Identity`将强制`SerialNo`成为对象的主键,这不是我想要的.我想将ID保留为主键,并在插入时计算序列号. (2认同)