MVC-ALTER TABLE DROP COLUMN失败,因为一个或多个对象访问此列

时间:2019-03-20 12:00:34

标签: c# sql-server entity-framework code-first

当尝试删除对类的引用时,我从程序包管理器控制台收到以下错误消息:

  

对象'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”,但无法应用。

2 个答案:

答案 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");