2016-12-05 5 views
0
public class Team 
    { 
     public Team() 
     { 
      TeamSchemes = new HashSet<Scheme>(); 
      TeamUsers = new HashSet<PLUser>(); 
     } 

     public int ID { get; set; } 
     public string Name { get; set; } 

     [ForeignKey("Office")] 
     public int OfficeID { get; set;} 
     public virtual Office Office { get; set; } 

     [ForeignKey("TeamLeader")] 
     public int TeamLeaderID { get; set; } 


     public virtual PLUser TeamLeader { get; set; } 
     public virtual ICollection<Scheme> TeamSchemes { get; set; } 
     public virtual ICollection<PLUser> TeamUsers {get;set;} 


    } 

나는 팀 객체와 사용자 객체를 가지고 있습니다. 내가 원하는어떻게 수정합니까 : System.Data.SqlClient.SqlException : 잘못된 열 이름 'TeamID'

관계는 다음과 같습니다 팀은 TeamLeader (사용자) 팀이 팀 여기

될 수있는 많은 사용자를 가지고있다하는 것은 내가 이러한 관계에 대한 내 사용자 개체에있는 것입니다

내가 어딘가에

에서 Team_ID라는 여분의 열을 얻고 있었다 codeFirst 마이그레이션을 실행할 때

 [ForeignKey("Team")] 
     public int? TeamID { get; set; } 
     public virtual Team Team { get; set; } 

     public virtual ICollection<Team> TeamsLeading { get; set; } 

그러나 내가 명시 적으로 같은 모델 빌더 내 관계를 언급 :

modelBuilder.Entity<Team>().HasRequired(x => x.TeamLeader).WithMany(u=>u.TeamsLeading).HasForeignKey(t=>t.TeamLeaderID); 

modelBuilder.Entity<PLUser>().HasOptional(x => x.Team).WithMany(t=>t.TeamUsers).HasForeignKey(x => x.TeamID); 

modelBuilder.Entity<PLUser>().HasMany(u => u.TeamsLeading).WithRequired(t => t.TeamLeader); 

마이그레이션 코드가 성공적으로 실행되어 의도 한 결과를 나타내는 것처럼 보입니다. 그러나 응용 프로그램을 실행할 때 다음 오류가 발생하고 응용 프로그램이 실행되지 않습니다.

System.Data.SqlClient.SqlException : 'TeamID'열 이름이 잘못되었습니다.

모델의 관계에 어떤 도움/고정 문제

답변

1

EF가 관계를 결정할 수 없다는 의견에 맞습니다. 특수 효과를 사용하는 한 가지 방법은 InverseProperty입니다. 당신은 (내가 한 이후 오랜만)이 함께 플레이 할 수 있습니다,하지만 당신은 다음과 같이 이동 할 수 있습니다 :

[InverseProperty("Team")] 
public virtual ICollection<PLUser> TeamUsers {get;set;} 

[InverseProperty("TeamLeader")] 
public virtual ICollection<Team> TeamsLeading { get; set; } 

편집 : 시도

[InverseProperty("TeamsLeading")] 
public virtual PLUser TeamLeader { get; set; } 
public virtual ICollection<Scheme> TeamSchemes { get; set; } 
[InverseProperty("Team")] 
public virtual ICollection<PLUser> TeamUsers {get;set;} 
+0

문제를 해결 한 것으로 보이는 스티브에게 감사드립니다. –

0

영구 속성 외래 키 사용은 여기에 잘못된 것입니다. 이를 원시 값 자체에 적용하고 있습니다. 올바른 사용법은 네비게이션 속성에 적용하여 어떤 프리미티브 속성이 FK 값을 저장하는지 나타냅니다. EF는 관례를 해결할 수 있기 때문에 귀하의 경우

이 필요하지 않습니다 :

public class PLUser{   
    public int? TeamID { get; set; } 
    public virtual Team Team { get; set; } 
} 

EF 팀 탐색 속성을 발견하면, 그것은으로, PLUser 내 TeamID 또는 TeamId라는 이름의 기본 속성을 찾기 위해 노력할 것입니다 Team 클래스 PK와 동일한 유형으로 ForeignKey로 사용합니다.

+0

이 문제는 해결되지 않았습니다. 나는 사용자와 팀간에 두 가지 관계가 있다는 사실과 관련이 있다고 생각한다. 1) 사용자는 선택적인 팀 ID 을 가지고있다. 2) 팀은 팀원 컬렉션을 가지고있다. (관계 1을 기반으로) 3) TeamLeaderID는 User ID (분리 된 관계 –

+0

나는 그 관계와 함께 예외적 인 것이 아무것도 보이지 않는다. 왜 EF가 만들어 졌는가?). ForeignKey 특성에서 코드를 정리 했습니까? –