2014-04-28 4 views
4

내 모델에서 내 주요 직원 모델과 외래 키 관계가있는 정보를 얻으려고합니다. 각 모델을 개별적으로 매핑하면 문제없이 정상적으로 액세스 할 수 있지만 이렇게하려면 여러 웹 페이지를 방문해야합니다.System.Data.SqlClient.SqlException : 잘못된 열 이름 'phone_types_phone_type_id'

필자는 내 모델 중 몇 가지를 본질적으로 단일 컨트롤러로 병합하여 이러한 방식으로 작업하려고합니다. 분명히 phone_types_phone_type_id가 나타납니다 유일한 위치 내 마이그레이션 코드에, 내 코드를 검색 한 후

System.Data.SqlClient.SqlException: Invalid column name 'phone_types_phone_type_id'.

: 나는이 모델에 액세스 할 때 불행하게도, 나는 이상한 오류가 발생합니다. 나는 믿을 수 없을 정도로 C#과 Asp.Net에서 새롭다. 그래서 어떤 도움을 주시면 감사하겠습니다.

[Table("employee.employees")] 
public partial class employees1 
{ 
    public employees1() 
    { 
     employee_email_manager = new List<email_manager>(); 
     employee_employment_history = new HashSet<employment_history>(); 
     employee_job_manager = new HashSet<job_manager>(); 
     employee_phone_manager = new HashSet<phone_manager>(); 
     this.salaries = new HashSet<salary>(); 
    } 

    [Key] 
    public int employee_id { get; set; } 
    [Display(Name="Employee ID")] 
    public int? assigned_id { get; set; } 

    [Display(Name="Web User ID")] 
    public int? all_id { get; set; } 

    [Required] 
    [StringLength(50)] 
    [Display(Name="First Name")] 
    public string first_name { get; set; } 

    [StringLength(50)] 
    [Display(Name="Last Name")] 
    public string last_name { get; set; } 

    [Column(TypeName = "date")] 
    [Display(Name="Birthday")] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
    public DateTime birth_day { get; set; } 

    [Required] 
    [StringLength(1)] 
    [Display(Name="Gender")] 
    public string gender { get; set; } 

    [Required] 
    [StringLength(128)] 
    [Display(Name="Social")] 
    public string social { get; set; } 

    [Required] 
    [StringLength(128)] 
    [Display(Name="Address")] 
    public string address_line_1 { get; set; } 

    [StringLength(50)] 
    [Display(Name="Suite/Apt#")] 
    public string address_line_2 { get; set; } 

    [Required] 
    [StringLength(40)] 
    [Display(Name="City")] 
    public string city { get; set; } 

    [Required] 
    [StringLength(20)] 
    [Display(Name="State")] 
    public string state { get; set; } 

    [Required] 
    [StringLength(11)] 
    [Display(Name="Zip")] 
    public string zip { get; set; } 

    [Column(TypeName = "date")] 
    [Display(Name="Hire Date")] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
    public DateTime hire_date { get; set; } 

    [Column(TypeName = "date")] 
    [Display(Name="Separation Date")] 
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
    public DateTime? termination_date { get; set; } 

    [StringLength(70)] 
    [Display(Name="Emergency Contact Name")] 
    public string emergency_contact_name { get; set; } 

    [StringLength(15)] 
    [Display(Name = "Emergency Contact Number")] 
    public string emergency_contact_phone { get; set; } 

    [Display(Name = "Notes")] 
    public string notes { get; set; } 

    public virtual ICollection<phone_manager> employee_phone_manager { get; set; } 

    [Table("employee.phone_manager")] 
    public partial class phone_manager 
    { 
     [Key] 
     public int phone_id { get; set; } 

     public int employee_id { get; set; } 

     [Required] 
     [StringLength(15)] 
     public string phone_number { get; set; } 

     [StringLength(5)] 
     public string phone_extension { get; set; } 

     public int phone_type { get; set; } 

     [Column(TypeName = "date")] 
     public DateTime date_added { get; set; } 

     public bool deleted { get; set; } 

     public virtual employees1 employees1 { get; set; } 

     public virtual phone_types phone_types { get; set; } 
    } 

    [Table("employee.phone_types")] 
    public partial class phone_types 
    { 
     public phone_types() 
     { 
      phone_manager = new HashSet<phone_manager>(); 
     } 

     [Key] 
     public int phone_type_id { get; set; } 

     [Required] 
     [StringLength(50)] 
     public string phone_type_name { get; set; } 

     public virtual ICollection<phone_manager> phone_manager { get; set; } 
    } 
} 

그리고 내보기에서 관련 코드 : 여기

는 내 모델에 대한 코드입니다

 @foreach (var item in Model.employee_phone_manager) 
     { 
      @Html.DisplayFor(modelItem => item.phone_number); 
      @: - 
      @Html.DisplayFor(modelItem => item.phone_type); 
      <br /> 
     } 

가 편집 내가 문제를 발견 할 수 있습니다,하지만 난 확실히거야 다른 옵션이있는 경우 더 많은 정보를 입력하십시오. 내 해결책은 다음을 추가하고 추가하는 것이 었습니다.이 라인 바로 위에 [ForeignKey("phone_type")] : public virtual phone_types phone_types { get; set; }이 내 phone_manager 클래스에 추가되었습니다.

답변

4

꽤 많은 연구를 한 후에 상당히 독특한 문제가있는 것처럼 보입니다. 나는이 사이트와 다른 많은 사이트에 나열된 몇 가지 수정 프로그램을 시도했지만 거의 문제를 해결하지 못했습니다.

그러나 원래 게시물의 맨 아래에 나열된 해결 방법은 제대로 작동하고 보류중인 것으로 보이므로 내 문제에 대한 적절한 해결책이라고 생각합니다.

MVC EF는 두 모델에서 fk/pk 관계를 찾으려고 시도했지만 모델의 열 이름이 다르기 때문에 제대로 매핑 할 수 없었습니다. email_types 테이블을 사용하여 모든 전자 메일을 email_manager에서 가져 오려면 문제가되지 않지만 뒤로 이동하고 email_types에서 email_manager으로 정보를 가져 오는 것이 오류를 던졌습니다.

두 테이블 사이의 열 이름이 다르므로 EF는 관계를 저장할 열을 만들려고했지만 열이 없으므로 오류가 발생했습니다. 이 문제를 해결하려면 EF에 외래 키 열이 실제로 무엇인지 알려주는 것이 부모 모델을 포함하는 컬렉션 위에 [ForeignKey("email_type")]을 사용하여 완료되는 것입니다.

[Table("employee.email_manager")] 
    public partial class email_manager 
    { 
     [Key] 
     public int email_id { get; set; } 

     public int employee_id { get; set; } 

     [Required] 
     [StringLength(255)] 
     public string email { get; set; } 

     public int email_type { get; set; } 

     [Column(TypeName = "date")] 
     public DateTime date_added { get; set; } 

     public bool deleted { get; set; } 
     [ForeignKey("email_type")] 
     public virtual email_types email_types { get; set; } 

     public virtual employees1 employees1 { get; set; } 
    } 

    [Table("employee.email_types")] 
    public partial class email_types 
    { 
     public email_types() 
     { 
      email_manager = new HashSet<email_manager>(); 
     } 

     [Key] 
     public int email_type_id { get; set; } 

     [Required] 
     [StringLength(50)] 
     public string email_type_name { get; set; } 

     public virtual ICollection<email_manager> email_manager { get; set; } 
    } 
5

문제는 웹 계층에서 데이터 계층과 연결 문자열에 연결 문자열이 서로 다른 데이터베이스를 가리키는입니다 다음과 같이

그래서 예를 들어, 나의 새로운 email_typesemail_manager 모델이었다.

데이터 계층 읽기 dev 데이터베이스 테스트 데이터베이스를 가리키는 webapp.

중 하나를 업데이트 연결 문자열은

또는

이 데이터베이스가 모두 같은 테이블과 열

0

당신은 [Table("employee.employees")]를 사용하여 데이터베이스 테이블을 지정이되어 있는지 확인 동일한 데이터베이스를 가리 키도록. 데이터베이스 테이블을 확인하십시오. 이름이 phone_types_phone_type_id 인 열이 있습니다. 해당 열의 데이터를 찾으려고하지만 열을 찾지 못하고이 메시지를 던집니다. 내 문제가 해결되었습니다 내 데이터베이스 데이터베이스 테이블을 확인하십시오.

관련 문제