2012-06-30 13 views
5

私は、ユーザが互いに従うことを可能にする機能を実装しています。 は、私はデータベーステーブルを持っている:エンティティフレームワーククラスの問題で同じ2つのクラスタイプがあります

User{UserId, FirstName, LastName etc.} 
Followings{FollowerUserId, FollowingUserId, CreatedOnDate etc.} 

だから私は、EFクラスを追加しました:

public class Follow 
    { 
     [Key, Column(Order = 1)] 
     public Guid FollowerUserId { get; set; } 
     [Key, Column(Order = 2)] 
     public Guid FollowUserId { get; set; }   
     public DateTime CreatedOnDate { get; set; } 

     public virtual User Follower { get; set; } 
     public virtual User Following { get; set; } 
    } 

最後の二つの仮想性質が問題をカウス。

var model = con.Follows.Where(x => x.FollowerUserId == uid); 

私は例外を以下の取得:

Invalid column name 'Following_UserId'. 

問題はおそらく1クラスに2つのユーザオブジェクトの原因とされ、私は呼んで 。これを回避するにはどのような考えですか?
UPDATE

public class User 
    { 

     public Guid UserId { get; set; } 
     ... 
     public virtual ICollection<Follow> Following { get; set; } 
     public virtual ICollection<Follow> Followers { get; set; } 
    } 
+0

私は両方を配置することはないと思えますユーザーIDとナビゲーションプロパティを使用する場合、それらのうちの1つだけを置く必要があります。それ以外の場合は、EFはそれらの間の接続を確立できません。 – Clueless

+0

これを修正する方法がわかりませんか? – 1110

答えて

4

私は理由はEFが認識することができないように、外部キープロパティ(FollowerUserIdFollowUserId)とナビゲーションプロパティ(FollowerFollowing)が命名規則を尊重していないということだと思います外部キーとしての最初のプロパティ。あなたは明示的に[ForeignKey]属性を使用して、FKのプロパティを指定することによって、問題を解決することができます

public class Follow 
{ 
    [Key, Column(Order = 1), ForeignKey("Follower")] 
    public Guid FollowerUserId { get; set; } 
    [Key, Column(Order = 2), ForeignKey("Following")] 
    public Guid FollowUserId { get; set; }   

    public DateTime CreatedOnDate { get; set; } 

    public virtual User Follower { get; set; } 
    public virtual User Following { get; set; } 
} 

編集

を命名規則を尊重していない少なくとも1つの第2の特性は、最初のものはOKに見えます。ナビゲーションプロパティがFollowingと呼ばれているので...

public Guid FollowingUserId { get; set; }   

:だから、代わりにあなたはに二FKプロパティFollowUserIdの名前を変更することで問題を解決することができます。

編集2

あなたのUPDATEについて:あなたはナビゲーションプロパティが一緒に属しているEFを伝えるために[InverseProperty]属性を追加する必要があります。

public class Follow 
{ 
    [Key, Column(Order = 1), ForeignKey("Follower")] 
    public Guid FollowerUserId { get; set; } 
    [Key, Column(Order = 2), ForeignKey("Following")] 
    public Guid FollowUserId { get; set; }   

    public DateTime CreatedOnDate { get; set; } 

    [InverseProperty("Followers")] // refers to Followers in class User 
    public virtual User Follower { get; set; } 
    [InverseProperty("Following")] // refers to Following in class User 
    public virtual User Following { get; set; } 
} 
+0

これは私の問題をフォロークラスで解決しました。それが問題でなければもう1つだけ私はまた、私の質問の更新でそれを追加したユーザークラスにフォロー/フォロワーのコレクションを追加しようとしたと私は再び同様のエラーが発生します:無効な列名 'User_UserId'。 – 1110

+0

@ 1110:「編集2」を参照してください。 – Slauma

関連する問題