У меня возникли проблемы с обновлением моей базы данных с использованием кода EF сначала после того, как я установил внешние ключи (ProcessID и SubProcessID) моей модели как допускающие значение NULL.
Вот модель:
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, я могу успешно обновить базу данных.
Спасибо за вашу помощь!
Up
, я думаю,AlterColumn("dbo.MyTable", "ProcessID", c => c.Int()); AlterColumn("dbo.MyTable", "SubProcessID", c => c.Int());
должно быть хорошо само по себе. (Кроме того, чтобы вашDown
действительно работал, вам нужно дать своим строкам с нулями в столбце внешнего ключа некоторую ненулевую ссылку) - person jjj   schedule 26.05.2015