2012-06-30 2 views
5

사용자가 서로 따라갈 수있는 기능을 구현 중입니다. 나는 데이터베이스 테이블이 있습니다엔티티 프레임 워크 클래스 문제에서 두 개의 동일한 클래스 유형

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

마지막 두 개의 가상 속성 나오긴 문제 :

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

그래서 내가 EF 클래스를 추가했다. 내가 전화 할 때 :

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

것은 내가 예외 다음 얻을 :

Invalid column name 'Following_UserId'. 

문제

은 아마 하나 개의 클래스로 인해 두 개의 사용자 개체를 발생합니다. 어떤 생각을 어떻게 해결할 수 있을까요?
UPDATE

public class User 
    { 

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

이 잘 보이지 않는다 : 당신은 탐색 속성이 함께 속해 EF 얘기하는 [InverseProperty] 속성을 추가 할 필요가 사용자 ID와 네비게이션 속성을 가지고 있다면, 그들 중 하나만 넣어야합니다. 그렇지 않으면 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; } 
} 

편집

을 이름 지정 규칙을 존중하지 않는 이상 두 번째 속성은, 첫 번째 확인을 보인다. 그래서, 또는 당신에 두 번째 FK 속성 FollowUserId 이름을 변경하여 문제를 해결할 수 :

public Guid FollowingUserId { get; set; }   

을 ... 탐색 속성이 Following라고 때문이다. 당신의 업데이트에 대한

편집 2

: 내가 모두를 넣어하는

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

고마워요. 내 문제를 다음과 같은 수업에서 해결했습니다. 한 가지 더 문제가되지 않으면 User/User 클래스에 follow/follower 컬렉션을 추가하려고했습니다. (질문에 업데이트를 추가했습니다.) 비슷한 오류가 나타납니다. 'User_UserId'가 잘못되었습니다. – 1110

+0

@ 1110 : 내 편집 2를 참조하십시오. – Slauma

관련 문제