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);
}
我不知道這是否是我應該如何去這個正確的做法。我一直在玩這個,但沒有取得太大的成功。我很感謝這裏的任何幫助,提前致謝!
也許我在這裏想到的東西,但每個MenuItem有多個定價層(意味着多個價格)。因此,每行都由一個菜單項組成,這些菜單項包含多個列(定價層),可能會或可能不會填充,具體取決於menuitempricingtiers實體的數據。 – user3167029
你還沒有想過......只是改變視圖模型然後..我會編輯我的答案。 –