实体Framewok使用二进制数组添加迁移失败

时间:2015-12-14 15:21:21

标签: c# mysql entity-framework entity-framework-6 ef-migrations

我一直在项目上使用EF 6.0 CodeFirst并成功添加了一些迁移,但现在我有一个新的迁移,我无法应用。这是脚手架迁移:

public partial class FileContentByteArray : DbMigration
{
    public override void Up()
    {
        AddColumn("dbo.JobsRecordHistories", "FileContent", c => c.Binary());
        AddColumn("dbo.JobsRecords", "FileContent", c => c.Binary());
    }

    public override void Down()
    {
        DropColumn("dbo.JobsRecords", "FileContent");
        DropColumn("dbo.JobsRecordHistories", "FileContent");
    }
}

在运行后,它失败并显示一条非常不清晰的消息:update-database -verbose:

PM> Update-Database -verbose
Using StartUp project 'JobsManager'.
Using NuGet project 'TasksJobsLib'.
Specify the '-Verbose' flag to view the SQL statements being applied to the       target database.
Target database is: 'SchedulerJobs' (DataSource: 172.20.101.236, Provider:     MySql.Data.MySqlClient, Origin: Configuration).
Applying explicit migrations: [201512141437137_FileContentByteArray].
Applying explicit migration: 201512141437137_FileContentByteArray.
alter table `JobsRecordHistories` add column `FileContent` longblob 
System.Runtime.Serialization.SerializationException: Type is not resolved     for member 'MySql.Data.MySqlClient.MySqlException,MySql.Data, Version=6.9.6.0,     Culture=neutral, PublicKeyToken=c5687fc88969c44d'.
   at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Run(BaseRunner      runner)
   at System.Data.Entity.Migrations.Design.ToolingFacade.Update(String      targetMigration, Boolean force)
   at System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
   at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
Type is not resolved for member     'MySql.Data.MySqlClient.MySqlException,MySql.Data, Version=6.9.6.0,     Culture=neutral, PublicKeyToken=c5687fc88969c44d'.

我昨天成功添加了一个迁移...我也尝试将新属性设置为nullable,将null作为默认值,但它不起作用。 我在JobsRecords上有大约300K的记录,在JobsRecordHistories上有大约600K的记录,所以我想也许它与需要做的很多更新有关,因此会超时?

更新:现在我看到新列确实添加到了我的表中!这是最糟糕的事情,因为现在代码和数据库都不是最新的!!

任何人都可以了解更新失败的原因,它成功改变表格的原因以及现在正确的举措是什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

好的,解决了它:
一个。我在配置部分更改了迁移操作的超时:

internal sealed class Configuration : DbMigrationsConfiguration<TasksJobsLib.TasksJobsDbContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
        AutomaticMigrationDataLossAllowed = false;
        **CommandTimeout = 200;**
    }

    protected override void Seed(TasksJobsLib.TasksJobsDbContext context)
    {
        //nothing
    }
}

湾当我尝试将新添加的byte []设置为nullable并将null设置为默认值时,此更改无效。我不知道为什么。

℃。我仍然不喜欢update-database命令的输出消息。它根本没有显示任何有用的细节!