实体框架 - 确保没有更新

时间:2015-06-27 09:31:30

标签: c# entity-framework

我正在使用WebAPI2(C#)并希望在Controller中使用以下代码(现在忽略这样一个事实,即最佳做法是使用一些" ViewModel"等效分离...)

Playlist p = await _db.Playlists.FindAsync(id);
p.Videos.ForEach(x => x.playlists = null);
return Ok(p);

使用EF的PlaylistVideo类通过导航属性具有多对多关系。

我可以100%确定,一旦我将播放列表设置为空(第2行),数据库将不会更新吗? (即不会使每个Video.playlists属性无效)

显然我没有调用SaveChanges ......但是EF仍然跟踪我认为的对象......

2 个答案:

答案 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