Кодът на Entity Framework първо не може да актуализира базата данни, след като зададе външен ключ като nullable

Имам проблем с актуализирането на моята база данни с помощта на EF код първо, след като задам външни ключове (ProcessID и SubProcessID) на моя модел като nullable.

Ето модела:

public class MyModel
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long MyModelID { get; set; }

    [Display(Name = "Process")]
    public int? ProcessID { get; set; }

    [Display(Name = "Sub Process")]
    public int? SubProcessID { get; set; }

    //... some more properties here

    public virtual Process Process { get; set; }
    public virtual SubProcess SubProcess { get; set; }
}

Ето кода за мигриране, след като добавя миграция:

public override void Up()
{
    DropForeignKey("dbo.MyTable", "ProcessID", "dbo.Process");
    DropForeignKey("dbo.MyTable", "SubProcessID", "dbo.SubProcess");
    DropIndex("dbo.MyTable", new[] { "ProcessID" });
    DropIndex("dbo.MyTable", new[] { "SubProcessID" });
    AlterColumn("dbo.MyTable", "ProcessID", c => c.Int());
    AlterColumn("dbo.MyTable", "SubProcessID", c => c.Int());
    CreateIndex("dbo.MyTable", "ProcessID");
    CreateIndex("dbo.MyTable", "SubProcessID");
    AddForeignKey("dbo.MyTable", "ProcessID", "dbo.Process", "ProcessID");
    AddForeignKey("dbo.MyTable", "SubProcessID", "dbo.SubProcess", "SubProcessID");
}

public override void Down()
{
    DropForeignKey("dbo.MyTable", "SubProcessID", "dbo.SubProcess");
    DropForeignKey("dbo.MyTable", "ProcessID", "dbo.Process");
    DropIndex("dbo.MyTable", new[] { "SubProcessID" });
    DropIndex("dbo.MyTable", new[] { "ProcessID" });
    AlterColumn("dbo.MyTable", "SubProcessID", c => c.Int(nullable: false));
    AlterColumn("dbo.MyTable", "ProcessID", c => c.Int(nullable: false));
    CreateIndex("dbo.MyTable", "SubProcessID");
    CreateIndex("dbo.MyTable", "ProcessID");
    AddForeignKey("dbo.MyTable", "SubProcessID", "dbo.SubProcess", "SubProcessID", cascadeDelete: true);
    AddForeignKey("dbo.MyTable", "ProcessID", "dbo.Process", "ProcessID", cascadeDelete: true);
}

Съобщението за грешка, което получавам е следното:

Table 'MyDatabase.dbo.MyTable' doesn't exist 

Забележка: Не успях да актуализирам базата данни само когато зададох тези външни ключове като nullable int. Но ако го направя като int, мога успешно да актуализирам база данни.

Благодаря за вашата помощ!


person jomsk1e    schedule 26.05.2015    source източник
comment
Не съм напълно сигурен, но в Up, мисля, че AlterColumn("dbo.MyTable", "ProcessID", c => c.Int()); AlterColumn("dbo.MyTable", "SubProcessID", c => c.Int()); трябва да е наред сам по себе си. (Също така, за да работи вашето Down действително, ще трябва да дадете на вашите редове с нули в колоната с външен ключ някаква ненулева препратка)   -  person jjj    schedule 26.05.2015


Отговори (1)


Ако някой от вас има същия проблем като мен, ето моето решение на моя проблем:

В папка Миграции > Configuration.cs:

Промених конструктора на конфигурацията на това:

public Configuration()
{
    AutomaticMigrationsEnabled = false;
    SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator());
    CodeGenerator = new MySql.Data.Entity.MySqlMigrationCodeGenerator();
}

И актуализиращата база данни вече работи!!

Ако някой от вас има проблеми с използването на подход на първо място при използване на MySQL, аз съм готов да помогна! :)

person jomsk1e    schedule 27.05.2015