我使用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,但是看起来我错了,因为当我尝试保存时我现在得到这个错误:“无法在表格中插入显式值IDENTITY_INSERT设置为OFF时的“部分”“
如何让实体框架识别该列现在是一个标识列?
答案 0 :(得分:4)
由于您在Id列尚未设置为IDENTITY时对数据库进行了反向工程,因此已生成代码优先模型,并为实体上的Id属性设置了DatabaseGeneratedOption.None
。
这会导致EF创建一个带有Id集的插入语句,在将列更改为IDENTITY后不再有效。
您必须手动修复该配置,方法是将其设置为DatabaseGeneratedOption.Identity
或完全删除它,因为这是整数字段的默认值。