【问题标题】:ASP.NET MVC 4 - Entity relationshipASP.NET MVC 4 - 实体关系
【发布时间】:2013-01-27 02:12:08
【问题描述】:

我正在 MVC 4 和 Entity 5 CF 中构建一个非常基本的站点,让我的 ViewModel、Automapper 和一个通用 DAL 启动并运行,但我被困在这个问题上:

基本上,我有三张桌子; BlogPost、标签(包含 TagId 和名称 - 只是标签列表,例如 C#、.NET、Ruby 等)和 EntryTags(BlogPostId 和 TagId - BlogPosts 和相关标签的列表)。我创建了一个 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)

【问题讨论】:

  • 您的 viewModel 应该包含一个属性,该属性是标签名称的 List&lt;string&gt;。然后在您的控制器中检索它们。

标签: c# .net asp.net-mvc-4 ef-code-first entity-framework-5


【解决方案1】:

您必须使用virtual 创建您的EntryTagnavigation properties 如下。

[Table("EntryTag")]
public class EntryTag
{
    [Key, DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int EntryTagId { get; set; }

    [Required]
    public virtual Entry Entry { get; set; }

    [Required]
    public virtual Tag Tag { get; set; }
}

【讨论】:

  • @milquetoastable 很高兴听到它有帮助!如果这是答案,请单击答案顶部的“右”标记接受它。B'cos 然后其他用户可以轻松找到解决方案。
猜你喜欢
  • 2015-08-18
  • 1970-01-01
  • 1970-01-01
  • 2013-04-07
  • 2019-04-15
  • 2014-10-24
  • 1970-01-01
  • 2011-11-09
  • 1970-01-01
相关资源
最近更新 更多