2012-03-14 78 views
3

我在使用EF 4.3代碼中的外鍵創建組合鍵時遇到了問題。我想通過數據註釋來解決這個問題。我無法找到正確的數據註釋,說明EventID是外鍵事件,並且是EventVote表中主鍵的一部分。我如何做到這一點代碼第一個由外鍵組成的密鑰ef 4.3

public class EventVote 
{ 

    [Key, Column(Order = 0)] 
    [ForeignKey("Event")] 
    public int EventID { get; set; } 

    [Key, Column(Order = 1)] 
    [ForeignKey("User")] 
    public int UserID { get; set; } 

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

    [Required] 
    public bool Vote { get; set; } 



    public virtual Event Event { get; set; } 
    public virtual User User { get; set; } 
} 

錯誤 表「EventVotes」引進國外KEY約束「EventVote_User」可能會導致循環或多個級聯路徑。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。 無法創建約束。查看以前的錯誤。

+0

錯誤信息或描述什麼實際上沒有工作? – AaronLS 2012-03-14 22:39:18

+0

更新錯誤消息 – gh9 2012-03-14 22:44:56

+1

發佈「事件」和「用戶」類的代碼 – Eranga 2012-03-15 00:04:48

回答

3

試試這個。您也可以將ForeignKey註釋放在導航屬性上並引用FK的名稱。不知道這是否會解決你的問題,但值得一試IMO

public class EventVote 
{ 

    [Key, Column(Order = 0)] 
    public int EventID { get; set; } 

    [Key, Column(Order = 1)] 
    public int UserID { get; set; } 

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

    [Required] 
    public bool Vote { get; set; } 


    [ForeignKey("EventID")] 
    public virtual Event Event { get; set; } 
    [ForeignKey("UserID")] 
    public virtual User User { get; set; } 
} 

編輯:從你的錯誤消息,這聽起來像你有類似於一個一對一的映射關係發生的問題。請參閱本文,瞭解如何使用流暢API指定禁用每個關係一側的級聯。

看到這篇文章解決了這個問題。請注意,他們正在使用可用於代替數據註釋的Fluent API來指定映射/關係,或者您可以使用數據註釋,並在必要時僅使用Fluent API關閉級聯/更新。

http://weblogs.asp.net/manavi/archive/2011/05/01/associations-in-ef-4-1-code-first-part-5-one-to-one-foreign-key-associations.aspx

+0

沒有修復錯誤。 – gh9 2012-03-14 22:45:22

+1

我最終使用了dataanotations和級聯刪除和更新的混合。謝謝! – gh9 2012-03-16 15:40:34