2016-08-20 115 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]"); 

被告知;我有完整的生產權限,以防萬一它失敗,並且沒有使用遷移回滾到以前的狀態。