在观看了将特定视图模型传递给视图的建议之后,我开始使用将域模型映射到 ASP.NET MVC 中的视图模型的概念。
我已经能够管理一个域模型到具有较少属性的更简单视图模型的基本映射,但现在需要生成更复杂的视图模型并且无法弄清楚。我有以下领域模型
public class Club
{
public int ClubID { get; set; }
public string FullName { get; set; }
public string Description { get; set; }
public string Telephone { get; set; }
public string URL { get; set; }
public DateTime CreatedDate { get; set; }
public virtual ICollection<Member> Members{ get; set; }
}
public class Member
{
public int MemberID{ get; set; }
public string Name { get; set; }
public MemberType Membership{ get; set; }
public virtual Club Club { get; set; }
public virtual int ClubID { get; set; }
}
public enum MemberType
{
Standard,
Special,
Limited
}
我想映射到这样的视图模型(注意:我这样拆分它是因为我认为它是有道理的,但我不确定)......
public class ClubDetailsViewModel
{
public int ClubID { get; set; }
public string FullName { get; set; }
public string Description { get; set; }
public IList<ClubDetailsMemberSummaryViewModel> Members { get; set; }
}
public class ClubDetailsMemberSummaryViewModel
{
public MemberType Membership { get; set; }
public int MemberCount { get; set; }
}
我最终想要的是一个页面,其中显示了一些俱乐部详细信息以及俱乐部成员类型的摘要报告以及成员数量。如:
Some Club Name
Description of the club.....
CLUB MEMBERS
Limited - 15
Standard - 100
所以我认为视图模型对此很有意义(尽管可能是更好的方法)。我苦苦挣扎的地方是如何映射元素。我可以让俱乐部将主要字段映射到俱乐部视图模型,但真的无法弄清楚如何将俱乐部列表的结果映射到他们的视图模型上,然后将其作为列表添加到主视图模型中。
我正在使用这个从我的存储库中获取俱乐部
var clubs = _clubRepository.GetClubByID(ID);
然后我可以使用实体框架转换使用包含在数据访问层中返回的法院
var grpCourts = from c in clubs.Members
group c by c.Membership into grp
select new { st = grp.Key, count = grp.Distinct().Count() };
我将如何遍历结果记录并将它们映射到 ClubDetailsMemberSummaryViewModel,然后将这些列表添加到主 ClubDetailsViewModel?