![](/img/trans.png)
[英]How can I make certain properties of my EF code-first classes internal to my 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.