
[英]How to alter column to unique identity in Entity Framework Code First
[英]How to alter column to identity using entity framework dbmigration?
我使用Entity Framework 5.0和电动工具反向设计了一个小型数据库。 然后我开始开发一个网站。 我遇到了一个问题,因为我忘记在我的一个表上创建ID列IDENTITY列。
所以我首先添加了一个代码迁移,并使用包管理器控制台中的update-database命令运行它。 这是我写的“Up”方法:
public override void Up()
{
Sql("DELETE FROM dbo.Sections");
Sql("DELETE FROM dbo.QuestionInstances");
DropForeignKey("dbo.SectionInstances", "SectionID", "dbo.Sections");
DropForeignKey("dbo.QuestionInstances", "SectionID", "dbo.Sections");
DropTable("dbo.Sections");
CreateTable(
"dbo.Sections",
c => new
{
ID = c.Int(nullable: false, identity: true),
UniqueDescription = c.String(nullable: false, maxLength: 50),
Heading = c.String(maxLength: 500),
})
.PrimaryKey(t => t.ID);
AddForeignKey("dbo.SectionInstances", "SectionID", "dbo.Sections");
AddForeignKey("dbo.QuestionInstances", "SectionID", "dbo.Sections");
}
我检查数据库,并已成功更改。
我期待实体框架更新其模型并停止显式设置ID,但看起来我错了,因为当我尝试保存时我现在得到这个错误:“无法在表'Sections'中为identity列插入显式值当IDENTITY_INSERT设置为OFF时“
如何让实体框架识别该列现在是一个标识列?
由于您在Id列尚未设置为IDENTITY时对数据库进行了反向工程,因此已使用为实体上的Id属性设置的DatabaseGeneratedOption.None
生成代码第一个模型。
这会导致EF创建一个带有Id集的insert语句,该列在将列更改为IDENTITY后不再有效。
您必须手动修复该配置,方法是将其设置为DatabaseGeneratedOption.Identity
或完全删除它,因为这是整数字段的默认值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.