实体框架中的自动递增列

时间:2018-08-21 13:03:00

标签: c# entity-framework data-annotations code-first

假设我有以下Entity Framework实体:

public class FileDownload
{
    [Key]
    public int Id { get; set; }

    public int FileTypeId { get; set; }

    public int FileHeaderId { get; set; }
}

对于每个下载的FileType,我希望FileHeaderId像主键一样工作。

所以我想要以下结构记录结构:

 ID    FileTypeId        FileHeaderId

 1         1                   1
 2         1                   2
 3         2                   1
 4         2                   2
 5         3                   1
 6         3                   2
 7         3                   3
 8         1                   3
 9         2                   3
10         1                   4

保存记录时是否可以自动设置?

我不想进行查找以找到最后一个ID,然后将其递增1。

每个文件中都使用FileHeaderId,并且每个文件类型必须唯一。

谢谢

1 个答案:

答案 0 :(得分:0)

如果您不能更改不使用序列号而是使用Guid或Date的要求,则必须执行以下操作之一:

  1. 查找以获取代码中的最后一个序列号。
  2. 或者使用数据库触发器或数据库中的某些内容设置正确的序列号。

关于#1有一些注意事项:

  1. 可以删除记录吗?重用序列号会不会有问题?
  2. 记录是否由多个线程创建。如果是,则不能确定,递增的最后一个序列号确实是最后一个,您可能需要另一个表来同步/锁定索引,以免索引被取两次或多次。

我仍然建议重新访问该体系结构,因为使用当前方法,您可能会拥有过多不必要的复杂性,可以通过稍微更改表模式来避免这种复杂性。