2011-10-22 2 views
1

예약 시스템을 구축 중입니다. 나는 역할 ('admin', 'client', 'employee', 'student')에 사용자가있다.엔티티의 네비게이션 속성이로드되지 않습니다.

각 예약은 역할 클라이언트의 사용자와 연결되어야하며 역할 직원의 사용자에게 할당 될 수 있으며 role student의 사용자에게 할당 될 수도 있습니다.

그래서 예약 클래스에는 User 유형의 속성이 있으며 릴레이션의 EF를 암시하기 위해 [ForeignKey ("AnytypeId")] 특성으로 표시했습니다. 내 mvc3 EF 코드 첫 번째 응용 프로그램 데이터베이스가 ERD 및 edmx 모델을 다음과 같이 즉석에서 나를 위해 만들어 실행으로

것은 내가 지금 http://blog.stevensanderson.com/2011/01/28/mvcscaffolding-one-to-many-relationships/

public class Reservation 
{ 

    public int ReservationID 
    { 
     get; 
     set; 
    } 

    [Required(ErrorMessage="Please provide a valid date")] 
    public DateTime ReservationDate 
    { 
     get; 
     set; 
    } 
    public DateTime ReservationEnd { get; set; } 
    public DateTime EntryDate 
    { 
     get; 
     set; 
    } 
    public DateTime UpdatedOn 
    { 
     get; 
     set; 
    } 
    public decimal Ammount 
    { 
     get; 
     set; 
    } 

    public decimal? Discount { get; set; } 

    [DataType(DataType.MultilineText)] 
    public string ServiceDetails { get; set; } 

    [DataType(DataType.MultilineText)]   
    public string Remarks { get; set; } 

    public String PaymentMethod { get; set; } 
    public string VoucherNumber { get; set; } 

    public int ServiceID 
    { 
     get; 
     set; 
    } 
    public virtual Service Service 
    { 
     get; 
     set; 
    } 


    public string EmployeeID { get; set; } 
    [ForeignKey("EmployeeID")] 
    public virtual User Employee { get; set; } 


    public string ClientID { get; set; } 
    [ForeignKey("ClientID")] 
    public virtual User Client { get; set; } 


    public string StudentID { get; set; } 
    [ForeignKey("StudentID")] 
    public virtual User Student { get; set; } 


} 

public class ReservationMap : EntityTypeConfiguration<Reservation> 
{ 
    public ReservationMap() 
    { 
     this.HasOptional(r => r.Client).WithMany().WillCascadeOnDelete(true); 
     this.HasOptional(r => r.Employee).WithMany().WillCascadeOnDelete(false); 
     this.HasOptional(r=>r.Student).WithMany().WillCascadeOnDelete(false); 
    } 
} 

에서 같은 코드를 보았다. 나는 데 enter image description here

이제 몇 가지 문제 : 1. 나는 데이터베이스에서 사용할 수있는 예약 자신의 경우에도 자신의 예약 속성이 항상 0을 보여주는보기에서 역할 클라이언트의 모든 사용자를 나열하고있다. 왜 가상으로 표시된이 컬렉션 속성이로드되지 않는지 모르겠습니다. ??

제발 내가 여기 남아있는 마지막 일은 이걸 도와주세요.

답변

0

모델에 몇 가지 문제점이 있습니다. 많은 끝 (Reservations 속성)이 매핑에서 제외되는 방식으로 일대 다 관계를 구성했습니다. 따라서 Reservations은 EF에 의해로드되지 않습니다.

다른 문제는 Reservations 속성을 관계의 많은 끝으로 매핑 할 경우 탐색 속성은 무엇입니까? 그것입니까? Employee, Client, Student? 이 속성 중 하나만 Reservations 속성과의 관계에 참여할 수 있기 때문입니다.

설명을 통해 이러한 관계를 모델링하는 방법은 명확하지 않습니다. 한 가지 방법은 3 가지 컬렉션 속성을 갖는 것입니다.

public class ReservationMap : EntityTypeConfiguration<Reservation> 
{ 
    public ReservationMap() 
    { 
     HasOptional(r => r.Client).WithMany(u => u.ClientReservations).WillCascadeOnDelete(true); 
     HasOptional(r => r.Employee).WithMany(u => u.EmployeeReservations).WillCascadeOnDelete(false); 
     HasOptional(r=>r.Student).WithMany(u => u.StudentReservations).WillCascadeOnDelete(false); 
    } 
} 
+0

가능한지 말해 줄 수 있습니까? 공용 클래스 ReservationMap : EntityTypeConfiguration { 공개 ReservationMap() { HasOptional (R => r.Client) .WithMany (U => u.Reservations) .WillCascadeOnDelete (TRUE); HasOptional (r => r.Employee) .WithMany (u => u.Reservations) .WillCascadeOnDelete (false); HasOptional (r => r.Student) .WithMany (u => u.Reservations) .WillCascadeOnDelete (false); } } 그래서 각 유형의 사용자가 예약을 채울 수 있습니까? – najam

+0

@najam 예. 너 시도 했니? – Eranga

+0

코드를 시도한 후 다음 오류가 발생했습니다. 지정한 스키마가 유효하지 않습니다. 오류 : (89,6) : 오류 0040 : 유형 Reservation_Employee가 네임 스페이스 CRS.Domain.Concrete (별칭 = 자체)에 정의되어 있지 않습니다. (90,6) : 오류 0040 : Reservation_Client 유형이 네임 스페이스 CRS.Domain.Concrete (별칭 = 자체)에 정의되어 있지 않습니다. 설명 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 시작된 위치에 대한 자세한 정보는 스택 추적을 검토하십시오. – najam

관련 문제