在视图

时间:2016-03-26 16:47:09

标签: c# sql asp.net-mvc entity-framework

我正在使用ASP.net MVC,C#我有两个模型类,Artist和Album,我创建了一个名为Operations的新单独类,将方法放在那里(我已经读过它了一个关于MVC实现的好习惯)单独层中的方法,而不是Controller类或Model类中的方法)。我想要一个方法来返回两个模型的信息,我已经用ArtistID创建了两个表Artist和Albums创建了数据库。我知道查询必须如何工作,但应该返回该方法?你知道哪种方法可以用来开发它吗?控制器如何调用此方法并创建一个视图,考虑到艺术家和专辑的混合?我应该专门为此创建一个ViewModel吗?我怎么能这样做?

模型类:

 public class Artist
 {
        public int ArtistID { get; set; }
        public string Name { get; set; }
        public string LastName { get; set; }
        public int Age { get; set; }
        public virtual List<Album> Albums { get; set; }
 }

public class Album
{
        public int AlbumID { get; set; }
        public string AlbumName { get; set; }
        public virtual Artist Artist { get; set; }
        public int ArtistID { get; set; }              
}

操作类:我调用方法AlbumsByArtist它不会返回Abum List,因为它返回Artist和Album之间的连接,应返回什么?我如何使用Controller将结果发送到View并在View中显示这些结果?

public class Operations
{
        MusicStoreDbContext db = new MusicStoreDbContext();
        public List<Album> AlbumsByArtist()
        {
            var temp = (from ar in db.Artists
                        join al in db.Albums on ar.ArtistID equals al.ArtistID
                        select new { al.AlbumName, ar.Name, ar.LastName });
            return temp;
        }
}

1 个答案:

答案 0 :(得分:4)

您必须在此处创建ViewModel。 ViewModel特定于我们的视图,我们希望根据需要显示特定数据。我们应该始终为视图创建视图模型,而不是直接在视图中使用数据库模型:

 public class AlbumsByArtistVM
 {
       public string AlbumName {get;set;}
       public string ArtistName {get;set}
       public string ArtistLLastName {get;set;}

 }

并返回如下:

public List<AlbumsByArtistVM> AlbumsByArtist()
{
    var temp = (from ar in db.Artists
                join al in db.Albums on ar.ArtistID equals al.ArtistID
                select new AlbumsByArtistVM
                { 
                   AlbumName =al.AlbumName, 
                   ArtistName =ar.Name, 
                   ArtistLLastName  =ar.LastName 
                });
    return temp;
}