我有这个模型:
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个自动递增的值?
答案 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");
});