实体框架核心2自动生成的列

时间:2018-10-25 13:18:37

标签: c# sql-server entity-framework entity-framework-core

我有这个模型:

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

我希望两个变量在添加时都自动递增。 如果我也将[Key]DatabaseGeneratedOption.Identity放在Variable属性上,则EF Core表示您不能有2个标识列。

我也尝试过使用FluentAPI

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

但是我仍然遇到相同的错误。

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

2 个答案:

答案 0 :(得分:5)

SqlServer每个表只允许一个标识列。但是它允许您根据需要定义和使用sequences

  

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

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

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

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

答案 1 :(得分:-1)

您尝试不放置任何东西并制作如下模型:

 public class Model
 {    
    public long? ModelId {get;set;}

    public int? Variable {get;set;}
 }

还有模型生成器:

 modelBuilder.Entity<Model>(entity =>
            {
                entity.HasKey(e => new { e.ModelId, e.Variable} )
                    .HasName("PK_Model");

            });