1

これで大体は把握できたと思います。この質問は、.NET MVC アプリケーションのコンテキストです。

私のエンティティ: (すぐにFluent nHibernateに 切り替えます)

[Serializable]
[Class(Schema = "dbo", Table = "LiveMedia")]
[Cache(1, Usage = CacheUsage.ReadWrite)]
public class Media : NhBase<Media>
{
    [Id(Name = "Id", Column = "ID"), Generator(1, Class = "native")]
    public virtual int Id { get; set; }

    [Property]
    public virtual string Title { get; set; }

    [Property]
    public virtual string Description { get; set; }

    [Property(Column = "TypeID")]
    public virtual MediaType MediaType { get; set; }

    [Property]
    public virtual DateTime CreatedAt { get; set; }

    [Property]
    public virtual DateTime UpdatedAt { get; set; }

    [Property]
    public virtual string EmbedUrl { get; set; }

    [Property]
    public virtual string ThumbnailUrl { get; set; }

    [Property]
    public virtual string S3Filename { get; set; }

    [XmlIgnore, Set(0, Table = "LiveCollectionMedia", Schema = "dbo", Cascade = CascadeStyle.AllDeleteOrphan, Lazy = true, Inverse = true), Key(1, Column = "MediaID"), OneToMany(2, Class = "BanffCentre.Business.Data.Live.MediaCollection, BanffCentre")]
    public virtual ISet<MediaCollection> Collections { get; set; }

    [XmlIgnore, Set(0, Table = "LiveMediaCategory", Schema = "dbo", Cascade = CascadeStyle.SaveUpdate, Lazy = true), Key(1, Column = "MediaID"), ManyToMany(2, Class = "BanffCentre.Business.Data.Live.Tag, BanffCentre", Column = "CategoryID")]
    public virtual ISet<Tag> Tags { get; set; }

    public Media()
    {
        Collections = new HashedSet<MediaCollection>();
        Tags = new HashedSet<Tag>();
    }
}

私のビューモデル:

public class MediaAudioViewModel
{
    public int? Id { get; set; }

    [Required]
    public string Title { get; set; }

    public string Description { get; set; }
    public MediaType MediaType { get; set; }
    public string ThumbnailUrl { get; set; }
    public IList<Tag> Tags { get; set; }
    public string S3Filename { get; set; }
    public HttpPostedFileBase AudioFile { get; set; }
}

質問:

ViewModel に "Tag" エンティティのコレクションを含めるべきではないことはわかっています。

public IList<Tag> Tags { get; set; }

では、代わりにTagViewModelをこれにマップすると思いますか? このような?

public IList<TagViewModel> Tags { get; set; }

これが多対多の関係である場合、タグのビューの作成を開始するときに、 TagViewModelからMediaViewModelをマップすると思いますか?

私はそう想像します... この抽象化が少しおかしくなっているように感じます。迅速な確認を願っています!

ありがとう。

編集

この投稿は私の質問に答えているようです。私はちょうどそれを見つけました。私はまだ他の考えに興味があります。

4

1 に答える 1

1

さらに読んだ後、ビュー モデルに他のビューモデルのコレクションを含める必要があると判断しました。AutoMapperを使用すると、通常、これを行うことができます。

Mapper.CreateMap<MediaDto, MediaVideoViewModel>();
Mapper.CreateMap<TagDto, TagViewModel>();
var videoModel = Mapper.Map<MediaDto, MediaVideoViewModel>(mediaDto);
于 2012-08-09T18:53:05.560 に答える