1:m关系的映射

时间:2013-09-27 11:31:29

标签: c# mysql sql model

映射1:m关系的最佳方式是什么?

例如。


歌曲数据库。我们有表格:

  • Songs
  • Artists
  • Albums

假设我们需要获取所有专辑。一首歌有Albums的外键 我过去做的是获取所有专辑的列表:

SELECT * FROM `Albums`;

然后将其映射到一个物体 接下来,我会为每个专辑创建一个for-each循环并创建一个新的SQL查询

SELECT * FROM `Songs` WHERE albumId = album;

然后我再次映射它。


这显然是矫枉过正的。

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

我认为Album拥有ICollection<Song> SongsArtist拥有ICollection<Album> Albums

是最有意义的

在此之后,您的查询应该是直截了当的。

  

假设我们需要获取所有相册。

SELECT * FROM Albums

  

专辑有歌曲的外键

我认为Song实际上应该有Album的外键,因为它唯一地定义了Song,可以在多个相册中。

  

我的问题实际上是非常严厉的措辞。你能举个例子吗?   这样的查询?就像在问题中一样:获取所有专辑   相关歌曲。

SELECT a.Album_Name, s.Song_Name FROM Albums a JOIN Songs s ON a.Album_Name = s.Album_Name

答案 1 :(得分:0)

如果您绝对需要完全填充所有模型对象,那么您最好获取所有歌曲,艺术家和专辑,并在本地缓存它们。

但是,通常情况下,当需要adidtional信息时,会发生模型对象的膨胀,例如。当用户选择“显示歌曲详细信息...”时,可以在此时恢复艺术家和专辑信息。