EF - 添加到由Id设置的关联

Dre*_*kes 4 .net performance entity-framework associations entity-framework-4

说我有很多关系:

Song  *---*  Artist
Run Code Online (Sandbox Code Playgroud)

我正在我的代码中,我想在歌曲中添加一个艺术家.我知道艺术家的ID,但我没有该Artist实体的实例.

目前我必须做的事情如下:

var artist = context.Artists.Single(a => a.Id == artistId);
song.Artists.Add(artist);
Run Code Online (Sandbox Code Playgroud)

这涉及数据库查询.

多对多关系被建模为表格:

SongId | ArtistId
-------+---------
Run Code Online (Sandbox Code Playgroud)

出于性能原因,我想做的只是在这个表中添加一个条目,而不必去DB加载一堆我不需要的实体数据.

有没有办法用EF做到这一点?例如,像这样的API:

song.Artists.Add(artistId);
Run Code Online (Sandbox Code Playgroud)

Lad*_*nka 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();
Run Code Online (Sandbox Code Playgroud)