我们使用实体框架。我对DB中的一个表有个问题。
Id是一个GUID,在这里我们手动创建一个新的GUID。现在,我想实现一个新列来自动递增,我希望从100000000开始。使列自动增量正常工作(我认为)
Company {
private Guid id = Guid.NewGuid();
[Required, Range(10000000, 999999999)]
[Index(IsUnique = true)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public virtual long StakeholderNumber
{
get;
set;
}
}在添加迁移时,我会得到这个迁移文件;
public override void Up()
{
AlterColumn("dbo.Companies", "StakeholderNumber", c => c.Long(nullable: false, identity: true));
CreateIndex("dbo.Companies", "StakeholderNumber", unique: true);
}
public override void Down()
{
DropIndex("dbo.Companies", new[] { "StakeholderNumber" });
AlterColumn("dbo.Companies", "StakeholderNumber", c => c.Long(nullable: false));
}这看起来很管用。但我希望stakeholderNumber从100000000开始,而不是从1开始。从其他示例来看,这可以通过将监视者编号设置为primary来工作,然后添加行:
Sql("DBCC CHECKIDENT ('dbo.Companies', RESEED, 100000000);");但我不想让监视者号成为primary!
如果我用updadte数据库运行这个程序,就会得到以下错误:
公司的不包含身份列
那么,是否有一种方法可以将Stakeholdernumber的自动增量设置为10000000,而不使用列primary
发布于 2018-01-03 14:01:50
我也有同样的问题,用顺序结束。我定义了一个序列,然后像这样使用它
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.HasSequence<int>("MySequence", schema: "shared").StartsAt(10000000).IncrementsBy(1);
modelBuilder.Entity<Company>()
.Property(o => o.StakeholderNumber)
.HasDefaultValueSql("NEXT VALUE FOR shared.MySequence");
} 对我来说很合适。我正在使用EF核心2.0。
参考文献:https://learn.microsoft.com/en-us/ef/core/modeling/relational/sequences
希望能帮上忙!
https://stackoverflow.com/questions/44063942
复制相似问题