5

我想知道实体框架的迁移是否有可能获取 sql 脚本来创建我的数据库的内容,包括来自配置类中我的种子方法的所有数据:

protected override void Seed(Sotasa.DAL.SqlContext context)
{
    //Data I'd like to be included to the script
}

Update-Database 命令的帮助看起来无法完成:

Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force] [-ProjectName <String>] [-StartUpProjectName 
<String>] [-ConfigurationTypeName <String>] -ConnectionString <String> -ConnectionProviderName <String> [<CommonParameters>]
4

2 回答 2

0

这是我所做的,可能不是那么漂亮,但它适用于我们(注意这是我们本地的开发和 CI 环境):

public class Configuration : DbMigrationsConfiguration<MyContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
        SetSqlGenerator(OracleConnectionInfo.InvariantName, new OracleEntityMigrationSqlGenerator());
    }

    protected override void Seed(MyContext context)
    {
        Logger.Write("In Seed method. User: " + userName);
        MyInitializer.AddUpdateDataSql(context);
    }
}

public class MyInitializer : MigrateDatabaseToLatestVersion<MyContext, Configuration>
{
    private const string Schemaname = "MYSCHEMA";

    public static void AddUpdateDataSql(Pronova2Context context)
    {
        DeleteTableData(context);
        DropCreateSequences(context);
        PopulateTypeTypeData(context);
        // etc.
    }

    private static void DeleteTableData(DbContext context)
    {
        context.Database.ExecuteSqlCommand(@"delete " + Schemaname + ".T_TABLE1"); }
        context.Database.ExecuteSqlCommand(@"delete " + Schemaname + ". T_TABLE2"); }
        // etc.
    }

    private static void DropCreateSequences(DbContext context)
    {
        context.Database.ExecuteSqlCommand(@"DROP SEQUENCE  " + Schemaname + ".T_TABLE1_SEQ"); }
        context.Database.ExecuteSqlCommand(@"DROP SEQUENCE  " + Schemaname + ".T_TABLE2_SEQ"); }
        // etc.
    }

    private static void PopulateTypeTypeData(DbContext context)
    {
        try { context.Database.ExecuteSqlCommand(@"Insert into " + Schemaname + ".T_TYPE_TYPE (TYPE_TYPE_ID,NAME,DESCRIPTION) values (1,'TypeType1','Name 1')");
        try { context.Database.ExecuteSqlCommand(@"Insert into " + Schemaname + ".T_TYPE_TYPE (TYPE_TYPE_ID,NAME,DESCRIPTION) values (2,'TypeType1','Name 2')");
        // etc.
    }
}
于 2013-04-22T11:17:44.353 回答
0

这是不可能的。(在 Seed 方法中生成数据以生成 SQL 语句)。

另一种解决方法是使用脚本来构建 -> 创建数据库 -> 使用数据编写数据库脚本?(Powershell 可能可以利用 sql server 管理对象来做到这一点。)

于 2013-04-21T11:58:06.320 回答