【问题标题】:EF - Add to an association set by IdEF - 添加到由 Id 设置的关联
【发布时间】:2011-03-30 15:05:23
【问题描述】:

假设我有一个多对多的关系:

Song  *---*  Artist

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

目前我必须这样做:

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

这涉及数据库查询。

多对多关系被建模为一张表:

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

出于性能原因,我想做的只是向此表添加一个条目,而不必去数据库加载一堆我不需要的实体数据。

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

song.Artists.Add(artistId);

【问题讨论】:

    标签: .net performance entity-framework entity-framework-4 associations


    【解决方案1】:

    你可以使用虚拟对象:

    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();
    

    【讨论】:

    • 非常有趣。我会尽快试试这个。所以这不会为虚拟实体拉下任何额外的数据?非常感谢!
    • 不,虚拟实体只是实体键(主键)数据的占位符。
    • 一个非常好的解决方案,再次感谢。这也是一种指定实体键的聪明方法,我想它可以是任何类型(甚至可能是复合的,尽管我还没有尝试过。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    • 2022-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多