1

私はMVC4とEntity5CFでかなり基本的なサイトを構築しており、この問題に悩まされていることを除いて、ViewModels、Automapper、および汎用DALを稼働させています。

基本的に、私は3つのテーブルを持っています。BlogPost、タグ(TagIdとNameを含む-タグのリスト(C#、. NET、Rubyなど))およびEntryTags(BlogPostIdとTagId-BlogPostと関連タグのリスト)。すべてのBlogPostsと関連するタグを取得するViewModelを作成しました。これは、タグのリストに各ブログの横にEntryTag IDのみが表示されることを除いて正常に機能します。これを、タグテーブルに正確にリンクする方法と場所がわかりません。タグの名前を取得します。

私が使用しているモデルの例:

BlogPostモデル:

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; }
}

ViewModel:

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; }
}

モデルとViewModel間のコントローラーからの自動マッピング

IEnumerable<BlogPost> blogPosts = _genericRepository.GetAll();
IEnumerable<BlogIndexViewModel> viewModel = Mapper.Map<IEnumerable<BlogPost>, IEnumerable<BlogIndexViewModel>>(blogPosts);

そしてブログのインデックスページ:

@Html.DisplayFor(modelItem => item.EntryTags)
4

1 に答える 1

2

EntryTag以下のようにクラスを作成する必要がありvirtual navigation 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; }
}
于 2013-01-27T14:03:22.850 に答える