EF - 加入凭身份证
问题描述:
设置关联说我有一个多对多的关系: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);
答
您可以使用虚拟对象:
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();
非常有趣。我会尽快尝试。所以这不会为虚拟实体提取任何额外的数据?非常感谢! – 2011-03-30 20:48:01
不,虚拟实体只是实体键(主键)数据的占位符。 – 2011-03-30 21:24:12
一个非常好的解决方案,再次感谢。这是指定实体键的一种智能方式,我认为它可以是任何类型(或者甚至可以是复合键,尽管我还没有尝试过)。 – 2011-03-30 23:31:18