我在这里读了一些:http://www.asp.net/mvc/tutorials/mvc-music-store-part-4并设置了一些卡住的
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; }
你能解释一下为什么我们应该拥有这些领域吗?
答案 0 :(得分: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);
}
答案 1 :(得分:1)
完全符合逻辑。 每张专辑都有你听的有流派和艺术家。所以他创造了一个流派和艺术家的自定义对象 例如:
public class Artist
{
public int ArtistId { get; set; }
public string Name { get; set; }
}
这样做是为了将其映射到数据库中的表,该数据库很可能具有ID和艺术家的名称。 类似于流派。
列表 像Rock这样的每个类型都有多张专辑,这就是为什么他在他正在使用的对象类型中删除了专辑对象列表的原因。 他会将对象列表添加到流派中,然后将它们作为一对多关系保存在数据库中。 好吧,他本可以保存一份更好的AlbumID ID列表,但我不确定完整的逻辑可能是在其他地方使用完整的对象