2016-03-26 14 views
1

Ben ASP.net MVC, C# ile çalışıyoruz İki model sınıfları var, Sanatçı ve Albüm, Ben yöntemleri koymak için Operasyon adlı yeni bir ayrı sınıf oluşturdu MVC ile ilgili yöntemleri, Controller sınıfında veya Model sınıflarında değil, ayrı bir katmanda uygulamak için iyi uygulama. Her iki modelin de bilgisini döndürmek için bir yöntem istiyorum, daha önce ArtistID tarafından eklenen iki tablo Sanatçı ve Albümler ile veritabanı oluşturdum. Sorgunun nasıl çalışması gerektiğini biliyorum, ancak bu yönteme ne dönmeli? Bunu geliştirmenin doğru yolu hangisi biliyor musunuz? Denetleyici bu yöntemi nasıl arayacak ve bunun bir Sanatçı ve Albümler karışımı olduğunu düşünerek nasıl bir görünüm oluşturacak? Bunun için özel bir ViewModel oluşturmalı mıyım? Bunu nasıl yapabilirim?Show linux sorgu bir bakış

Modeli Sınıflar:

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

Operasyon Sınıf: bunun bir Sanatçı ve Albüm arasındaki katılmak döndürdüğü için bir abum Listesini dönen çalışmalarını Bozmayacağım AlbumsByArtist ne olduğunu dönüş gerektiğini, yöntem aradı? Denetleyiciyi sonuçları bir Görünüm'e göndermek ve bu sonuçları bir Görünümde göstermek için nasıl kullanabilirim?

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

cevap

4

Burada bir ViewModel oluşturmalısınız. ViewModels, ihtiyacımıza göre belirli verileri görüntülemek istediğimiz Görüşlerimize özeldir.

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

} 

ve bunun gibi dönmek: Biz yerine görünümünde doğrudan veritabanı modellerini kullanarak Görünümler için daima Görüntüle Modelleri oluşturmalıdır

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