2011-10-21 25 views
1

我看过一些在这里:http://www.asp.net/mvc/tutorials/mvc-music-store-part-4并设置一些卡ASP.NET MVC如何链接2模型 - 需要一些解释?

namespace MvcMusicStore.Models 
{ 
    public class Artist 
    { 
     public int ArtistId { get; set; } 
     public string Name { get; set; } 
    } 
} 
namespace MvcMusicStore.Models 
{ 
    public class Album 
    { 
     public int  AlbumId  { get; set; } 
     public int  GenreId  { get; set; } 
     public int  ArtistId { get; set; } 
     public string Title  { get; set; } 
     public decimal Price  { get; set; } 
     public string AlbumArtUrl { get; set; } 
     public Genre Genre  { get; set; } 
     public Artist Artist  { get; set; } 
    } 
} 
namespace MvcMusicStore.Models 
{ 
    public partial class Genre 
    { 
     public int  GenreId  { get; set; } 
     public string Name  { get; set; } 
     public string Description { get; set; } 
     public List<Album> Albums { get; set; } 
    } 
} 

专辑中的类,为什么他们有:

public Genre Genre  { get; set; } 
public Artist Artist  { get; set; } 

而在流派班,为什么他们有:

 public List<Album> Albums { get; set; } 

你能解释为什么我们应该有这些领域?

回答

2

该属性提供了访问每个对象上的链接对象,他们让我们做的东西像代码 -

var GenreName = album.Genre.Name 
var ArtistName = album.Artist.Name 

同样,你可以通过使用public List<Album> Albums属性链接到一个流派的专辑迭代。实体框架将使用数据库中的相关数据填充对象的必要链接属性。根据实体框架代码的调用方式,可以立即或延迟加载链接的属性数据。

此处作为一例是一些翻出链接到一个特定类型的专辑代码,注意Include函数是如何调用该函数确保Album数据从数据库在Genre信息被拉到同一时间拉升 -

public ActionResult Browse(string genre) 
{ 
    // Retrieve Genre and its Associated Albums from database 
    var genreModel = storeDB.Genres.Include("Albums") 
     .Single(g => g.Name == genre); 

    return View(genreModel); 
} 
+0

你能告诉我怎么样“公开名单相册”,我看到一个类型可以有很多专辑,所以也许这是代码的想法,但我是新来的C#... – nvcnvn

+0

就是这样 - 一个类型可能有许多专辑,而'List '将保存该类型的所有专辑。由于每个专辑只有一个艺术家和流派,所以专辑只有一个'genre'属性和一个'Artist'属性。 – ipr101

1

完全合乎逻辑。 每张专辑有你听一个流派和一个艺术家。所以他创造了这两个流派和艺术家 例如这个自定义对象:

public class Artist 
{ 
    public int ArtistId { get; set; } 
    public string Name { get; set; } 

}

这样做是为了它映射到数据库表中最有可能的是有一个ID和的名字艺术家。 类似于流派。

为列表 喜欢摇滚曲风每一个具有多个相册里面这就是为什么他decared他正在使用.. 他将对象添加专辑列表,流派对象流派专辑里面的对象的列表,那么可以将它们作为一对多的关系保存在数据库中。 好吧,他本来可以保存的AlbumID的ID列表会更好,但我不知道完整的逻辑可能是在其他地方使用完整的对象