2012-03-14 39 views
3

最初にEF 4.3コードの外部キーから作成された複合キーの作成に問題があります。データアノテーションによってこの問題を解決したいと思います。私は、EventIDが外部Key to Eventであり、EventVoteテーブルの主キーの一部であるという正しいデータ注釈を見つけることができません。私は、テーブル「EventVotes」にFOREIGN KEY制約「EventVote_User」を紹介この外部キーからなる最初の複合キー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; } 
} 

エラー を達成するにはどうすればよいのサイクルまたは複数のカスケードパスを引き起こす可能性があります。 NO DELETE NO ACTIONまたはUP UP NO NO ACTIONを指定するか、他のFOREIGN KEY制約を変更してください。 制約を作成できませんでした。以前のエラーを参照してください。

+0

エラーメッセージ、または実際には動作していないものの説明? – AaronLS

+0

がエラーメッセージ – gh9

+1

で更新されました。 'Event'クラスと' User'クラスのコードを投稿します。 – Eranga

答えて

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; } 
} 

編集を解決するかどうかわからない:あなたのエラーメッセージからは、1対1の関係のマッピングで何が起こるかと同様の問題を持っているようですね。各リレーションシップの一方の側でカスケードを無効にするためにFluent 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

+1

私は、データアノテーションとカスケード削除と更新の組み合わせを使用して終了しました。ありがとうございました! – gh9

関連する問題