1

EF-database-first를 사용하여 MVC4 웹 응용 프로그램을 만들었습니다. 예를 들어 , 부 부분 클래스 :복합 키가있는 MVC4 탐색 속성

[MetadataType(typeof(DepartmentMetadata))] 
public partial class Department 
{ 
    public int DeptID { get; set; } 
    public string DeptName { get; set; } 
    public System.DateTime EffDate { get; set; } 
    public string Status { get; set; } 
    public string RevenueAccount { get; set; } 
} 

부 메타 클래스 :

public class DepartmentMetadata 
{ 
    [Required] 
    public int DeptID { get; set; } 

    [Required] 
    [Display(Name = "Department Name")] 
    public string DeptName { get; set; } 

    [Required] 
    [Display(Name = "Effective Date")] 
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", NullDisplayText = "--", ConvertEmptyStringToNull = true)] 
    public System.DateTime EffDate { get; set; } 

    [Required] 
    public string Status { get; set; } 

    [Display(Name = "Revenue Account")] 
    [StringLength(10)] 
    public string RevenueAccount { get; set; } 
} 

할당 표는 복합 키 [ID, 이름, EffDate, 상기 데이터베이스에 정의 외부 키를 가지고 테이블, Department 테이블을 참조합니다. 또한 복합 키 [DeptID, ProjectID, BillableUnitID, EffDate]가 있습니다. 가능한 경우 DeptID 필드를 외래 키로 선언 하겠지만 데이터베이스를 제어하지는 않으며 더 중요한 것은 외래 키가 외래 키를 복합 키의 일부로 허용하지 않는다고 생각합니다.

[MetadataType(typeof(AllocationMetadata))] 
public partial class Allocation 
{ 
    public int DeptID { get; set; } 
    public int ProjectID { get; set; } 
    public int BillableUnitID { get; set; } 
    public System.DateTime EffDate { get; set; } 
    public string Status { get; set; } 
    public decimal Allocation1 { get; set; } 
} 

이 작동하지만 DeptID 번호의 열이 표시됩니다. 내가 갖고 싶은 것은 부서 이름의 열입니다.

이전의 question

가상 탐색 특성에 저를 지시, 그래서 그들을 추가 :

색인에 대한 AllocationController의 코드는
[MetadataType(typeof(AllocationMetadata))] 
public partial class Allocation 
{ 
    [ForeignKey("Department")] 
    public int DeptID { get; set; } 
    public int ProjectID { get; set; } 
    public int BillableUnitID { get; set; } 
    public System.DateTime EffDate { get; set; } 
    public string Status { get; set; } 
    public decimal Allocation1 { get; set; } 

    public virtual Department Department { get; set; } /* navigation property */ 
} 

입니다 : 공공 ActionResult 지수() { 반환보기 (db.Allocation . 포함 (a => a.Department) .ToList());

서버 오류 '/'응용 프로그램 :

내가 할당 인덱스보기의 링크를 클릭 }

, 나는 (I 디버깅 중지 후)이 오류 메시지가 표시됩니다.

지정한 포함 경로가 유효하지 않습니다. EntityType 'KC_BillableUnit_TESTModel.Allocation'은 'Department'라는 이름의 탐색 속성을 선언하지 않습니다.

스택 추적 [InvalidOperationException : A 지정 포함 포함 경로가 유효하지 않습니다. EntityType 'KC_BillableUnit_TESTModel.Allocation은'이름 '부'와 탐색 속성을 선언하지 않습니다.]
System.Data.Objects.Internal.ObjectFullSpanRewriter.ConvertSpanPath을 (SpanPathInfo parentInfo, List`1 navPropNames, INT32의 POS) + 8355128
System.Data.Objects.Internal.ObjectFullSpanRewriter..ctor (DbCommandTree 나무, DbExpression toRewrite, 스팬 스팬) 나는 다양한 조합을 시도했습니다

256 는 .... 계속 .... 모든 주석은 동일한 오류가 발생합니다.

DeptID 번호 대신 Department 이름을 표시하도록 할당 목록을 가져 오려면 어떻게해야합니까?

답변

0

물론 드릴 수 있습니다! 내 생각에 문제는 네비게이션 속성을 한쪽 (할당)으로 선언 한 것이지만 양쪽에서 선언해야한다는 것입니다 (부서도 마찬가지입니다).

[MetadataType(typeof(DepartmentMetadata))] 
public partial class Department 
{ 
    public Department() 
    { 
     this.Allocations = new HashSet<Allocation>(); 
    } 

    // properties ... 

    public virtual ICollection<Allocation> Allocations { get; set; } 
} 
:

다음은 문제를 해결해야합니다