我正在使用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;
}
}
答案 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;
}