11

我有这堂课:

public class HabitDo{
    public int? HabitId { get; set; }
    virtual public Habit Habit { get; set; }

    public int DoId { get; set; }
    virtual public Do Do { get; set; }

    public string Restriction { get; set; }

    public int? ObjectiveId { get; set; }
    public Objective Objective { get; set; }

    public virtual ICollection<DoObjective> Objectives { get; set; }
}

该表很好,但随后我从代码中删除了 Objective 属性:

 public class HabitDo{
    public int? HabitId { get; set; }
    virtual public Habit Habit { get; set; }

    public int DoId { get; set; }
    virtual public Do Do { get; set; }

    public string Restriction { get; set; }

    public virtual ICollection<DoObjective> Objectives { get; set; }
}

当从管理器控制台调用 update-database 时,EF 会重命名 ObjectiveId 列而不是删除它:

    EXECUTE sp_rename @objname = N'HabitDoes.ObjectiveId', @newname =  N'Objective_Id', @objtype = N'COLUMN'

任何线索为什么会发生这种情况?

4

1 回答 1

12

这是因为您可能仍然拥有现有的一对多关系 - 您刚刚删除了关系一侧的导航属性,但另一侧仍然存在。因为那个 EF 必须在你的表中保留 FK 列。EF 只是将隐藏的 FK 列重命名为默认命名约定。

于 2012-07-25T10:00:56.967 回答