我有我的初始遷移文件,其中包含所有實體表,並更新數據庫幷包含所有表。 現在我想改變一個表並將聚集索引從主鍵更改爲另一個索引。代碼修改如下所示。 我在這裏做了兩個小的改變,爲主鍵設置爲假,另一個索引爲真。不知道這是否會工作,因爲現在我試圖更新數據庫時出現錯誤。更改遷移文件的表後,如何更新數據庫?
CreateTable(
"dbo.YogaSpaceEvents",
c => new
{
YogaSpaceEventId = c.Int(nullable: false, identity: true),
Title = c.String(),
DateTimeScheduled = c.DateTime(nullable: false),
AppointmentLength = c.Int(nullable: false),
StatusEnum = c.Int(nullable: false),
YogaSpaceRefId = c.Int(nullable: false),
})
.PrimaryKey(t => t.YogaSpaceEventId, clustered: false)
.ForeignKey("dbo.YogaSpaces", t => t.YogaSpaceRefId, cascadeDelete: true)
.Index(t => t.DateTimeScheduled, clustered: true)
.Index(t => t.YogaSpaceRefId);
如果我運行update-database,我得到一個錯誤說「實體'blahblah'已經存在於數據庫中」。它來自遷移文件中的第一個「CrateTable」語句。用遷移文件中的更改更新數據庫的步驟是什麼?我是否需要創建另一個遷移文件,只進行更改?
嗨。也許我可以重新修改我的問題 - 如何修改遷移文件中的表格?我可以說「添加遷移ChangeIndex」並創建一個新文件。在該文件中,我想更改一些表索引(例如,將主鍵上的集羣刪除到另一個索引),然後更新數據庫。 – user1186050 2015-04-04 21:38:19
據我所知,表上的聚集索引可能只有在創建時纔會設置。 EF遷移引擎不足以認識到這一點。所以在你的情況下,你將被強制刪除YogaSpaceEvents表(指令DropTable),並通過CreateTable指令提供的方式再次創建它。當然,在丟棄之前,您還需要刪除引用您的表的任何外鍵關係。如果你想從YogaSpaceEvents保存你的數據,那麼不要使用RenameTable來更改名稱,然後創建新表,使用Sql函數複製數據並刪除舊錶。 – mr100 2015-04-05 06:26:53