2016-03-02 66 views
0

類:多對多主鍵

public class BranchAds 
{ 
    [Key, Column(Order = 0)] 
    [ForeignKey("branch")] 
    public int branch_id { get; set; } 
    [Key, Column(Order = 1)] 
    [ForeignKey("ad")] 
    public int advertisement_id { get; set; } 

    [JsonIgnore] 
    public virtual Branch branch { get; set; } 
    public virtual Advertisement ad { get; set; } 

    [JsonProperty("start_time")] 
    public DateTime start_time { get; set; } 

    [JsonProperty("end_time")] 
    public DateTime end_time { get; set; } 

    public DateTime date { get; set; } 

} 

此錯誤:

Violation of PRIMARY KEY constraint 'PK_dbo.BranchAds'. Cannot insert duplicate key in object 'dbo.BranchAds'. The duplicate key value is (1, 26).

發生在我嘗試使用相同的密鑰插入另一BranchAds ..嗯,我應該因爲從理論上講,這是一個很多到很多(聯結)表。然而數據庫似乎沒有意識到這一點。

爲什麼我這樣做?因爲我需要在許多表中的自定義字段。

我能做些什麼來解決這個問題?在BranchAds類中不添加[Key]

+0

它不應該有它自己的BranchAdsID? – shole

+0

沒有原因?創建多對多不需要自己的'id'。舉一個例子,只要兩個表引用彼此作爲'ICollections' ... – user1027620

+1

,因爲通常對於外鍵的每對(x,y),它只能出現一次。現在你需要重複幾次,因爲自定義字段或其他什麼,那麼你必須使用某些東西來區分具有相同對值的兩個記錄? – shole

回答

0

如果BranchAds是你的中間表,那麼我沒有看到任何定義在你的對象上的PK。您是否在數據庫級別強制實施了複合PK約束(分支+廣告)?

+0

另一件事,爲什麼你不想在BranchAds上添加一個PK(讓它只是一個自動增量)? –