我正在使用WebAPI2(C#)并希望在Controller中使用以下代码(现在忽略这样一个事实,即最佳做法是使用一些" ViewModel"等效分离...)
Playlist p = await _db.Playlists.FindAsync(id);
p.Videos.ForEach(x => x.playlists = null);
return Ok(p);
使用EF的Playlist
和Video
类通过导航属性具有多对多关系。
我可以100%确定,一旦我将播放列表设置为空(第2行),数据库将不会更新吗? (即不会使每个Video.playlists
属性无效)
显然我没有调用SaveChanges ......但是EF仍然跟踪我认为的对象......
答案 0 :(得分:1)
您可以使用AsNoTracking()
extension,但不能使用FindAsync
。
Playlist p = await _db.Playlists.AsNoTracking().SingleOrDefault(p => p.Id == id);
p.Videos.ForEach(x => x.playlists = null);
return Ok(p);
答案 1 :(得分:1)
禁用延迟加载,而不是Include
播放列表:
_db.Configuration.LazyLoadingEnabled = false;
Playlist p = await _db.Playlists.FindAsync(id);
现在您甚至不必清除播放列表。
但请注意,将项目添加到播放列表仍然不安全。他们可能会以某种方式得救。因此,仍然建议在此基础上使用AsNoTracking
。