首页 > 解决方案 > Entity Framework Core 2 自动生成的列

问题描述

我有这个模型:

public class Model
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long ModelId {get;set;}
    public int Variable {get;set;}
 }

我希望这两个变量在添加时自动递增。如果我把[Key]DatabaseGeneratedOption.Identity也放在变量属性上,EF Core 说你不能有 2 个标识列。

我也尝试过FluentAPI

modelBuilder.Entity().Property(variable => variable).ValueGeneratedOnAdd();

但我仍然得到同样的错误。

如何在添加时有 2 个自动递增的值?

标签: c#sql-serverentity-frameworkentity-framework-core

解决方案


SqlServer 每个表只允许一个标识列。但它允许您根据需要定义和使用尽可能多的序列

一个序列在数据库中生成一个连续的数值。序列不与特定表关联。

按照上面的 EF Core 文档链接,您可以指示 EF 创建序列并将其用于您的Variable列,如下所示(如文档所述,“您无法使用数据注释配置序列”):

modelBuilder.HasSequence<int>("VariableSequence");

modelBuilder.Entity<Model>().Property(e => e.Variable)
    .HasDefaultValueSql("NEXT VALUE FOR VariableSequence");

推荐阅读