繁体   English   中英

如何使用实体框架dbmigration将列更改为标识?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM