2016-03-02 64 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(让它只是一个自动增量)? –