4

設置關聯說我有一個多對多的關係:EF - 加入憑身份證

Song *---* Artist 

我在我的代碼一個地步,我想一個藝術家加入到歌曲。我知道藝術家的ID,但我沒有Artist實體的實例。

目前我有做一些事情,如:

var artist = context.Artists.Single(a => a.Id == artistId); 
song.Artists.Add(artist); 

這涉及到一個DB查詢。

的許多一對多的關係建模爲一個表:

SongId | ArtistId 
-------+--------- 

我今天準備這樣做,因爲性能原因,是剛剛添加到這個表中的條目,而不必去DB加載一堆我不需要的實體數據。

有沒有辦法與EF做到這一點?例如,像這樣的API:

song.Artists.Add(artistId); 

回答

5

您可以使用虛擬對象:

var song = context.Songs.Single(s => s.Id == songId); 
var artist = new Artist { Id = artistId }; 
context.Artists.Attach(artist); 
song.Artists.Add(artist); 
context.SaveChanges(); 
+0

非常有趣。我會盡快嘗試。所以這不會爲虛擬實體提取任何額外的數據?非常感謝! – 2011-03-30 20:48:01

+0

不,虛擬實體只是實體鍵(主鍵)數據的佔位符。 – 2011-03-30 21:24:12

+0

一個非常好的解決方案,再次感謝。這是指定實體鍵的一種智能方式,我認爲它可以是任何類型(或者甚至可以是複合鍵,儘管我還沒有嘗試過)。 – 2011-03-30 23:31:18