当尝试删除对类的引用时,我从程序包管理器控制台收到以下错误消息:
对象'FK_dbo.Resultats_dbo.Ovelses_OvelseId'依赖于列'OvelseId'。 ALTER TABLE DROP COLUMN OvelseId失败,因为一个或多个对象访问此列。
在对模型进行以下更改时出现此问题
public class Resultater
{
public int Id { get; set; }
[Required]
public string AspNetUsersId { get; set; } //foreign key for users
//public Ovelser Ovelse { get; set; }
//[Required]
//public int OvelseId { get; set; }
[Required]
[Display(Name = "Dato")]
public DateTime Date { get; set; }
[Required]
public string Form { get; set; }
}
public class Ovelser
{
public int Id { get; set; }
[Required]
[Display(Name = "Øvelse")]
public OvelseType OvelseType { get; set; }
[Required]
public short OvelseTypeId { get; set; }
[Required]
public decimal Resultat { get; set; }
[Required]
[Display(Name = "Hvordan var utførelsen")]
public string Beskrivelse { get; set; }
}
在开始迁移时,Package Manager控制台为我提供了以下代码:
public override void Up()
{
DropForeignKey("dbo.Resultaters", "OvelseId", "dbo.Ovelsers");
DropIndex("dbo.Resultaters", new[] { "OvelseId" });
DropColumn("dbo.Resultaters", "OvelseId");
}
public override void Down()
{
AddColumn("dbo.Resultaters", "OvelseId", c => c.Int(nullable: false));
CreateIndex("dbo.Resultaters", "OvelseId");
AddForeignKey("dbo.Resultaters", "OvelseId", "dbo.Ovelsers", "Id", cascadeDelete: true);
}
我发现了一个非常相似的问题“ ALTER TABLE DROP COLUMN failed because one or more objects access this column”,但无法应用。
答案 0 :(得分:0)
在SQL Server Management Studio中尝试此操作,然后进行迁移。
use [Name Of Your Database];
alter table Resultater drop constraint [FK_dbo.Resultats_dbo.Ovelses_OvelseId];
答案 1 :(得分:0)
我正在查看DropForeignKey()。还有另一个版本,允许您指定外键的名称。您也许可以将其添加到您的迁移中。 Microsoft document on DropForeignKey
DropForeignKey("dbo.Resultaters", "FK_dbo.Resultats_dbo.Ovelses_OvelseId");