我使用Entity Framework 5.0和電動工具反向設計了一個小型數據庫。然後我開始開發一個網站。我遇到了一個問題,因爲我忘記了在IDENTITY列中的某個表上創建ID列。如何使用實體框架dbmigration將列更改爲標識?
所以我增加了一個代碼先遷移和包管理器控制檯使用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」
如何獲得實體框架認識到,列現在是標識列?
你真的有一個代碼第一種模式,或者是你使用EDMX文件? – 2013-03-28 10:26:33
我使用的是代碼優先。沒有EDMX。 – Colin 2013-03-28 10:30:12
好的 - 我想你有用'DatabaseGeneratedOption.None'配置的Id屬性。 Powertools在第一次逆向工程時可能會這樣做,所以您必須手動刪除它,因爲現在您已將其作爲標識列。 – 2013-03-28 10:34:02