我首先使用Entity Framework 6代码。我有三个这样的实体:
public class Doctor
{
public string DoctorID { get; set; }
public string firstName { get; set; }
public string lastName { get; set; }
}
public class ExpertiseDetails
{
[Key, Column(Order = 1)]
public short expertiseID { get; set; }
[Key , Column(Order = 2)]
public string DoctorID { get; set; }
[ForeignKey("expertiseID")]
public Expertise expertise { get; set; }
public Doctor doctor { get; set; }
}
public class Expertise
{
[Key]
public short expertiseID { get; set; }
public string expertiseTitle { get; set; }
}
我需要one to many
和Expertise
之间的Doctor
关系,当我在控制台nuGet
中运行update-database语句时,此错误显示:
'PK_dbo.ExpertiseDetails' is not a constraint. Could not drop constraint
出了什么问题?
答案 0 :(得分:2)
在重命名表模式后经历过类似的问题,我解决了用sql显式删除PK名称。
在我的情况下,在重命名表模式后在表中更改了主键时出现了问题:
原件:
第1步:架构更改:
第2步:改变PK
DropPrimaryKey("Logging.LogEntries");
最后一行转换为PK名称:PK_Logging.LogEntries
,但不存在。
修复: 一般来说,有几种方法可以解决这个问题。我在显式迁移中通过sql语句删除了PK。
Sql("ALTER TABLE [Logging].[LogEntries] DROP CONSTRAINT [PK_dbo.LogEntries]");
建议;我有完整的生产访问权限,以防它失败并且没有使用迁移回滚到以前的状态。
答案 1 :(得分:0)
如here所述,默认名称可能与您的数据库不匹配。在这种情况下,文档说要手动修改迁移文件(Up
和Down
方法)以使用name
参数,该参数将覆盖主文件名或外部文件名的默认名称。键(或其他数据库对象,具体取决于情况)。
例如,对于我来说,生成的行:
DropPrimaryKey("dbo.MyTable");
成为:
DropPrimaryKey("dbo.MyTable", "PK_MyTable");