我正在 MVC 4 和 Entity 5 CF 中构建一个非常基本的站点,让我的 ViewModels、Automapper 和一个通用 DAL 启动并运行,但我被困在这个问题上:
基本上,我有三张桌子;BlogPost、标签(包含 TagId 和 Name - 只是标签列表,例如 C#、.NET、Ruby 等)和 EntryTags(BlogPostId 和 TagId - BlogPost 和相关标签的列表)。我创建了一个 ViewModel,它获取所有 BlogPosts 和相关标签,它工作正常,除了标签列表仅在每个博客旁边显示 EntryTag ID,我不确定如何以及在何处将其链接到标签表获取标签的名称。
我正在使用的模型示例:
博文模型:
public abstract class BlogPost
{
[Key, DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int BlogPostId { get; set; }
[Required, MaxLength(20)]
public string Title { get; set; }
[Required]
public string Content { get; set; }
[Required]
public DateTime DateCreated { get; set; }
[Required]
public DateTime DateModified { get; set; }
public virtual ICollection<EntryTag> EntryTags { get; set; }
}
标签型号:
[Table("Tag")]
public class Tag
{
[Key, DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int TagId { get; set; }
[Required]
[MaxLength(20)]
public string Name { get; set; }
}
[Table("EntryTag")]
public class EntryTag
{
[Key, DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int EntryTagId { get; set; }
[Required]
public Entry Entry { get; set; }
[Required]
public Tag Tag { get; set; }
}
视图模型:
public class BlogIndexViewModel
{
public int EntryId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public DateTime DateCreated { get; set; }
public virtual ICollection<EntryTag> EntryTags { get; set; }
}
模型和视图模型之间的控制器自动映射
IEnumerable<BlogPost> blogPosts = _genericRepository.GetAll();
IEnumerable<BlogIndexViewModel> viewModel = Mapper.Map<IEnumerable<BlogPost>, IEnumerable<BlogIndexViewModel>>(blogPosts);
和博客索引页面:
@Html.DisplayFor(modelItem => item.EntryTags)