【发布时间】:2011-03-13 14:08:07
【问题描述】:
在 SQL 中,我有:
[Bands] 1 ---- * [BandsGenres] * ---- 1 [Genres]
在我的 EF 层中,它转换为:
[乐队] * ---- * [流派]
(BandsGenres 是 BandId 和 GenreId)
我的问题是,我似乎不知道如何只删除我需要的选定关系。基本上,我正在尝试更新乐队的类型列表。传递了一个 Guid 列表,我可以使用连接来获取那些。但是, .Remove() 方法不会删除旧类型并添加新类型。我尝试使用 .Attach(g) 和 .DeleteObject(g) 但这删除了实际的流派(来自流派)而不仅仅是关系。
public void UpdateBandGenres(Guid bandId, IEnumerable<Guid> genres)
{
using (var ctx = new OpenGroovesEntities())
{
var newGenres = from g in ctx.Genres
join t in genres on g.GenreId equals t
select g;
//var bandGenres = ctx.Genres.Include("Bands").Where(g => g.Bands.Any(b => b.BandId == bandId));
var bandGenres = ctx.Bands.SingleOrDefault(b => b.BandId == bandId).Genres;
bandGenres.ToList().ForEach(g =>
{
bandGenres.Remove(g);
});
newGenres.ToList().ForEach(g => bandGenres.Add(g));
ctx.SaveChanges();
}
}
在给定流派 ID 列表的情况下,如何删除/添加或更新我的乐队流派关系列表?谢谢。
【问题讨论】:
标签: c# asp.net linq entity-framework linq-to-entities