2014-01-10 51 views
0

我有創建EF(DB第一種方法)應用程序的MVC 5。我遇到的問題是正確顯示每列中正確數據的列表。MVC 5 DB首先EF顯示3類視圖模型(DAL)

我有3個班在我的DAL:

public partial class MenuItem 
{ 
    public int MenuItemID { get; set; } 
    [DisplayName("Item Name")] 
    public string name { get; set; } 
    [DisplayName("Description")] 
    public string description { get; set; } 
    public int catID { get; set; } 

    public virtual Category Category { get; set; } 
} 

public partial class PricingTier 
{ 
    public PricingTier() 
    { 
     this.MenuItemsPricingTiers = new HashSet<MenuItemsPricingTier>(); 
    } 

    public int PricingTierID { get; set; } 
    public string tierName { get; set; } 

    public virtual ICollection<MenuItemsPricingTier> MenuItemsPricingTiers { get; set;} 
} 

public partial class MenuItemsPricingTier 
{ 
    public int MenuItemPricingTierID { get; set; } 
    public int itemID { get; set; } 
    public int tierID { get; set; } 
    public Nullable<decimal> price { get; set; } 
    public Nullable<int> sortOrder { get; set; } 
    public Nullable<bool> hide { get; set; } 

    public virtual PricingTier PricingTier { get; set; } 
} 

我需要的觀點是列出的菜單項(由傳遞給控制器​​選擇的類別ID過濾),爲每個定價等級列。如果菜單項具有菜單項定價層,則需要在該列中顯示價格。問題是每個菜單項可能有或沒有菜單項定價層。此外,由於菜單項定價層和菜單項之間沒有外鍵,所以表設計得不好。

我試圖創建一個viewmodel類來顯示這個,但我似乎無法將事情聯繫在一起。下面是這個視圖模型類:

public class MenuItemViewModel 
{ 
    public MenuItemViewModel(MenuItem menuitem, IEnumerable<MenuItemsPricingTier>      menuitemspricingtiers) 
    { 
     this.menuitem = menuitem; 
     this.menuitemspricingtiers = menuitemspricingtiers.Where(x=>x.itemID == menuitem.MenuItemID); 
    } 
    public MenuItem menuitem { get; set; } 
    public IEnumerable<MenuItemsPricingTier> menuitemspricingtiers { get; set; } 
} 

這裏是我的控制器:

public ActionResult Index(int catID) 
    { 
     var menuitems = db.MenuItems.Include(m => m.Category); 

     IEnumerable<MenuGridData> viewmodel = new IEnumerable<MenuGridData>(); 

     foreach (MenuItem mi in menuitems) { 
      // add to viewmodel using repository.GetMenuItem(mi.MenuItemID) ?? 
     } 


     IEnumerable<MenuItemsPricingTier> menuitemspricingtiers = repository.GetMenuItemsPricingTiers(); 

     return View(viewmodel); 
    } 

我不知道這是否是我應該如何去這個正確的做法。我一直在玩這個,但沒有取得太大的成功。我很感謝這裏的任何幫助,提前致謝!

回答

0

您應該創建專用視圖模型類。你提到的每個菜單項可能會或可能不會有PriceItem,爲什麼不爲你的視圖模型做到這一點:

public class MenuItemViewModel 
{ 
    public MenuItem MenuItem { get; set; } 
    public List<PriceItem> PriceItems { get; set; } 
} 

我可以與視圖模型下去,關鍵是不要試圖強迫你的EF模型類作爲視圖模型。創建包含您需要的所有內容的特定視圖模型。有時候人們會爲視圖編寫全新的模型,然後通過控制器轉換爲域/ EF模型。

+0

也許我在這裏想到的東西,但每個MenuItem有多個定價層(意味着多個價格)。因此,每行都由一個菜單項組成,這些菜單項包含多個列(定價層),可能會或可能不會填充,具體取決於menuitempricingtiers實體的數據。 – user3167029

+0

你還沒有想過......只是改變視圖模型然後..我會編輯我的答案。 –

相關問題