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
你还没有想过......只是改变视图模型然后..我会编辑我的答案。 –