【发布时间】:2017-05-19 07:25:28
【问题描述】:
我们使用实体框架。我对数据库中的表有疑问。
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));
}
这看起来可行。
但我希望利益相关者编号从 100000000 而不是 1 开始。
在其他示例中,这可以通过将涉众编号设置为 primary 然后添加以下行来实现:
Sql("DBCC CHECKIDENT ('dbo.Companies', RESEED, 100000000);");
但我不希望涉众编号为primary!
如果我使用 updadte-database 运行它,我会收到以下错误:
公司不包含标识列
那么有没有办法将 Stakeholdernumber 的自动增量设置为 10000000 而无需创建列 primary?
【问题讨论】:
-
您能否展示完整的示例 - 原始实体模型/配置和修改后的实体/配置。
-
实际上问题在于迁移不会将现有列更改为
IDENTITY。看看Migrate entity with updated DatabaseGeneratedOption in Entity-Framework,了解如何解决它。 -
把SQL中的默认值设置为MAX+1怎么样,而不是尝试使用实体框架来做到这一点。
标签: c# asp.net entity-framework code-first