0

我的學生表中有現有數據。現在我想在其中添加外鍵。當我嘗試使用現有數據添加外鍵時,它會給出錯誤「ALTER TABLE語句與FOREIGN KEY約束衝突」。如果我從Student表中刪除所有數據,那麼它會成功添加外鍵。現在我想添加外鍵而不會丟失遠程服務器上的數據。我該怎麼做?我看到了各種答案,但沒有找到解決辦法。當我在遠程服務器上的表中存在現有數據時,在我的表中添加外鍵?

學生表(見最後兩個屬性)

public int Id { get; set; } 

    [Required] 
    [StringLength(30)] 
    [RegularExpression(@"^[A-Za-z\s]{1,}[\.]{0,1}[A-Za-z\s]{0,}$", 
    ErrorMessage = "Invalid name. Use letters only")] 
    public string Name { get; set; } 

    [Required] 
    [StringLength(30)] 
    [RegularExpression(@"^[A-Za-z\s]{1,}[\.]{0,1}[A-Za-z\s]{0,}$", 
    ErrorMessage = "Invalid name. Use letters only")] 
    [Display(Name = "Father Name")] 
    public String FatherName { get; set; } 


    [Display(Name = "Student Picture")] 
    public String ImageURL { get; set; } 

    public Class Class { get; set; } 

    [Required] 
    [Display(Name = "Class Title")] 
    public int ClassId { get; set; } 

    [ForeignKey("Account")] 
    public int AccountId { get; set; } 

    public virtual Account Account { get; set; } 

    public string Gender { get; set; } 

    public string Status { get; set; } = "Active"; 

    [Required] 
    [Range(0, 10000)] 
    public int RegistrationFee { get; set; } 

    public int InstalmentId { get; set; } 

    public virtual Instalment Instalment { get; set; } 
    } 

這裏是我的分期付款表,標識我想讓FK在學生

public int Id { get; set; } 

    [Required] 
    public int Instalment1 { get; set; } 

    [Required] 
    public DateTime Date1 { get; set; } 

    public int Instalment2 { get; set; } 

    public DateTime Date2 { get; set; } 

    public int Instalment3 { get; set; } 

    public DateTime Date3 { get; set; } 

    public int Instalment4 { get; set; } 

    public DateTime Date4 { get; set; } 
} 

我想很簡單的解決方案因爲將來會有很多情況下我會相應地改變數據庫。謝謝!

+1

請發佈兩個表的表模式。 – Eli

回答

2

由於您有現有數據,FK必須爲空。所以FK必須是int?

如果這不適合您的業務邏輯,那麼您必須選擇一個默認學生,並在更新db之前編輯相應的migration.cs文件。

Imho,可空解決方案在您的情況下最好:適應您的業務邏輯以適應傳統數據。

+0

是的,你是對的!你給了我解決方案。但是我們怎麼能進一步解決它呢?如果我們想讓它不可空? –

+0

您可以使其爲空,使用有效的FK填充每條記錄,然後您可以更改該表以使其不可空。 – Eli

+0

@Eli正確。你是對的。 –

2

基本上你必須找到哪些記錄是衝突的:這是你要執行外鍵的地方,但是不符合約束條件。

然後修復通過添加缺失數據或更正現有數據來錯誤設置的內容。

然後你就可以在桌子上添加外接鍵了。

例如:

如果PERSON表字段是的jobId JOBS表的外鍵,你必須在53的jobId和53 PERSON表的記錄中的作業表不存在你將無法運行Alter表來添加主要的關鍵限制。

首先,您必須將具有ID 53的作業添加到JOBS表中,或者如果作業實際上存在但使用了不同的ID,請更正PERSON表中的jobId。

我希望這能澄清你的疑問。

相關問題