2012-08-09 37 views
1

我想我已经把这一切都弄清楚了。这个问题是.NET MVC应用程序的上下文。如何处理ViewModel中的集合?

我的实体:(我会切换到功能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; } 
} 

问题:

一世 知道我不应该在我的视图模型“变量”实体的集合:

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

所以我是想图个TagViewModel这个呢?喜欢这个?

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

如果这是一个许多一对多关系,我是想当我开始为标签创建视图的MediaViewModelTagViewModel地图?

我想象如此......我只是觉得这个抽象的东西变得有点疯狂。只希望快速确认!

谢谢。

编辑

This post似乎回答我的问题。我刚刚找到它。我仍然对任何其他想法感兴趣。

回答

1

在做了一些更多的阅读后,我决定我的视图模型应该包含其他ViewModels的集合。使用AutoMapper我通常可以为我做这件事。

Mapper.CreateMap<MediaDto, MediaVideoViewModel>(); 
Mapper.CreateMap<TagDto, TagViewModel>(); 
var videoModel = Mapper.Map<MediaDto, MediaVideoViewModel>(mediaDto);