【发布时间】:2012-08-03 14:22:45
【问题描述】:
- 我有各种
locations,每个都有自己的Products列表。 - 每个
Product都属于一个SubCategory。 - 每个
SubCategory都属于一个Category。
当给定Location 时,我需要显示Categories 的列表,因此我需要一个可以提取与所述位置的产品相关联的潜在类别列表的 ViewModel。
我想做这样的事情(我的 ViewModel):
public class LocationSummaryViewModel
{
public Location Location { get; set; }
private ICollection<Category> categories;
public ICollection<Category> Categories
{
get
{
if ( Establishment != null )
{
foreach (var item in Location.Products)
{
categories.Add(item.SubCategory.Category);
}
return categories;
}
else
{
Categories.Add(new Category { Name = "Default Category" });
return categories;
}
}
}
}
但这在语法上不起作用,因为categories 从未实例化。另外,我不确定是否应该在 ViewModel 中添加这么多逻辑。
通过将逻辑从包含在我的 ViewModel 中的位置中的产品列表中提取类别信息,我是否朝着正确的方向前进?还是我会以一种非常不寻常的方式来解决这个问题?
如果我以完全奇怪的方式执行此操作,那么从 Location 实体中包含的产品列表中获取类别信息的更好方法是什么?
作为参考,我的位置模型:
public class Location
{
public int LocationId { get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
我的产品型号:
public class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
public int CategoryId { get; set; }
public virtual SubCategory SubCategory { get; set; }
public int LocationId { get; set; }
public virtual Location Location { get; set; }
}
和我的子类别模型:
public class SubCategory
{
public int SubCategoryId { get; set; }
public string Name { get; set; }
public int CategoryId { get; set; }
public virtual Category Category { get; set; }
}
更新:我在下面发布了我自己问题的潜在答案 - 欢迎提供更好的答案/建议
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 entity-framework viewmodel lazy-loading