2016-08-20 93 views
2

我先使用Entity Framework 6代码。我有三个实体这样的:'PK_dbo.EntityName'不是一个约束。无法删除约束.EF6

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; } 
} 

我需要ExpertiseDoctor之间的one to many赫志,当我在控制台nuGet运行更新数据库语句此错误显示:

'PK_dbo.ExpertiseDetails' is not a constraint. Could not drop constraint 

有什么不对?

+0

我想你有你的分贝数据,请删除数据,然后再试 – Moein

+0

@Moein。我尝试了你的建议,但它不起作用! – Majid

回答

1

在重命名表模式之后,我遇到过类似的问题,我通过使用sql显式删除PK名来解决问题。

在我的情况下,当一个主键是在一个表重命名表模式后更改的问题出现了:

原文:

  • dbo.LogEntries与PK-名称:PK_dbo.LogEntries

步骤1:模式变更:

  • Logging.LogEntries与PK不变

第2步:PK变化

  • PK改变:导致DropPrimaryKey("Logging.LogEntries");

最后一行将转换为PK-名称:PK_Logging.LogEntries不存在。

修复: 一般来说,有几种方法来解决这个问题。我通过显式迁移中的sql语句删除了PK。

Sql("ALTER TABLE [Logging].[LogEntries] DROP CONSTRAINT [PK_dbo.LogEntries]"); 

被告知;我有完整的生产权限,以防万一它失败,并且没有使用迁移回滚到以前的状态。