2011-10-22 134 views
1

我正在構建預訂系統。我有角色的用戶('admin','client','employee','student')。實體的導航屬性未加載

每個預留必須與角色客戶端的用戶相關聯,它可能被分配給角色員工的用戶,也可能被分配給角色學生的用戶。

因此,在我的預訂類中,我具有User類型的屬性,並用[ForeignKey(「AnytypeId」)]屬性標記它們以提示EF關係。

我在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); 
    } 
} 

見過這樣的代碼,現在我運行了我MVC3 EF代碼第一個應用程序數據庫中創建上飛與以下ERD和EDMX模型。 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(真); 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(Alias = Self)中定義。 (90,6):錯誤0040:類型Reservation_Client未在名稱空間CRS.Domain.Concrete(Alias = Self)中定義。 描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。 – najam