0

我一直在使用標準添加遷移方法來更新實體框架上的我的aspnet核心數據庫。我現在必須將兩個「圖像」列移動到一個新表(及其圖像數據)中,從原始表中移除列,並在舊錶和新表之間建立外鍵關係。我有一個有效的SQL腳本來完成這一切。作爲實體框架遷移的一部分執行自定義SQL腳本

如何執行此sql腳本作爲正常EF遷移的一部分,並確保後續的添加遷移更改將反映我的sql腳本將執行的更改(添加新的表/列,從原始圖像中刪除圖像列表)?

我見過一些SqlFile的引用,並從DbMigration派生,但沒有什麼符合我的場景很好。我正在使用EF Core,aspnet核心2.0。

+0

修改模型,生成遷移,然後編輯生成的遷移的Up方法並使用['Sql'](https://docs.microsoft.com/en-us/ef/core/api /microsoft.entityframeworkcore.migrations.migrationbuilder#Microsoft_EntityFrameworkCore_Migrations_MigrationBuilder_Sql_System_String_System_Boolean_)方法裏面。類似於[在EF Core中添加一對一關係時遷移數據?](https://stackoverflow.com/questions/42811193/migrating-data-when-adding-one-to-one-relationship-in- ef-core/42867561#42867561) –

回答

1

您可以編輯生成的遷移類(UpDown方法),包括你在正確的地方希望任何SQL:

protected override void Up(MigrationBuilder migrationBuilder) 
{ 
    migrationBuilder.DropColumn(
     name: "MyExtraColumn", 
     table: "MySuperTable"); 

    migrationBuilder.Sql("DROP DATABASE [master]"); // <<< Anything you want :) 

    migrationBuilder.DropColumn(
     name: "MyExtraColumn2", 
     table: "MySuperTable"); 
} 

這是你的責任,不「破發」的數據庫模式(在視圖的EntityFramework點)並提供可靠的Down腳本,以便能夠多次向上/向下/向上/向下遷移。

另外,如果您將刪除遷移並重新添加SQL,請不要忘記重新添加SQL。

+0

而且,如果您想要相當於'SqlFile()',只需使用'Sql(File.ReadAllText(「my.sql」))''。 – bricelam