2015-10-06 38 views
5

我正在使用EF6.0并执行我的db与SQLServerDatabaseProject。 我想使用EF迁移工具进行数据库迁移。但因为我有我的数据库DbProject我希望我所有的迁移文件是SQLFiles(而不是c#) 所以我想知道如果EF支持此功能,如果不是,是否有可能编写一个新的Migration类,使EF功能,但以这种方式工作?是否可以使用sql文件作为EF数据库迁移?

也请考虑,我不想EF生成我的迁移作业,但我希望能够使用其他迁移命令,如更新数据库,并...

==更多详细描述有关问题==

我不想让c#类加载我的sql文件。必须直接保存sql文件以进行上下迁移,并将其视为与DbMigration类完全相同。 的迁移DIR一个简单的例子是这样的:

Migrations 
    -> up 
     -> 201510060807125_alter-course-change-family.sql 
     -> 201510060813136_alter-course-add-mark-column.sql 
    -> down 
     -> 201510060807125_alter-course-change-family.sql 
     -> 201510060813136_alter-course-add-mark-column.sql 

回答

5

只需在移民类使用SqlFile扩展方法:

public partial class MyFancyMigration : DbMigration 
{ 
    public override void Up() 
    { 
     SqlFile("myUpSQLFile.sql"); 
    } 

    public override void Down() 
    { 
     SqlFile("myDownSQLFile.sql"); 
    } 
} 
+0

Thanx的答案,但我想知道是否有可能使用SQL文件迁移,而不是c#类。 –

-1

虽然可以使用SqlFile方法,我建议你写这在您的迁移文件夹中的Configuration.cs文件的Seed方法。

internal sealed class Configuration : DbMigrationConfiguration<YourDbContext> 
{ 
    protected override void Seed(YourDbContext context) 
    { 
     base.Seed(context); 
     context.Database.ExecuteSqlCommand(FileReadAllText("migration.sql")); 
    } 
} 

如果你在Up方法编写迁移。当您更新数据库时,它将在每次迁移时执行,我认为您不期望。

你想要的是你的脚本每运行Update-Database。 (不是每个迁移在它)

+0

Thanx的答案,但我想知道是否有可能使用SQL文件进行迁移,而不是C#类 –

相关问题