繁体   English   中英

MVC 5 DB第一个EF显示具有3个类的视图模型(DAL)

[英]MVC 5 DB first EF displaying view model with 3 classes(DAL)

我有一个要创建的带有EF(数据库优先方法)的MVC 5应用程序。 我遇到的问题是正确显示每列中具有正确数据的列表。

我的DAL有3个课程:

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可能有或没有PriceItem,为什么不对您的视图模型这样做:

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

我可以继续使用该视图模型,关键是不要尝试将EF模型类强制为视图模型。 创建包含所需内容的特定视图模型。 有时人们为视图编写全新的模型,然后通过控制器转换为Domain / EF模型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM