我有这堂课:
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; }
}
从管理器控制台EF调用update-database时,重命名ObjectiveId列而不是删除它:
EXECUTE sp_rename @objname = N'HabitDoes.ObjectiveId', @newname = N'Objective_Id', @objtype = N'COLUMN'
为什么会发生这种情况的任何线索?
答案 0 :(得分:9)
这是因为您可能仍然存在现有的一对多关系 - 您刚刚删除了关系一侧的导航属性,但另一侧仍然存在。因为EF必须在表格中保留FK列。 EF只是将隐藏的FK列重命名为默认命名约定。