在下面的片段中,我尝试使用 Anonymous Projection
获取数据,我不想跟踪获取的 entities
。
注意:我已经解决了现有的堆栈问题,但无法为我找到有效的解决方案
using (var db = new Entities())
{
db.Configuration.LazyLoadingEnabled = false;
db.Configuration.ProxyCreationEnabled = false;
var myprojection = db.Table1
.AsNoTracking()
.Include(gh=>gh.Table2) //Update
.Include(gh=>gh.Table3) //Update
.Select(x => new
{
table1= x,
table2= x.Table2.Where(g => Some Condition),
table3= x.Table3.Where(g=>Some Condition)
})
.ToList();
var result = myprojection.Select(g =>g.table1).FirstOrDefault();
}
When i use
AsNoTracking()
data from the inner tables (table2,3) is lost during the conversion at this linevar result = myprojection.Select(g =>g.table1).FirstOrDefault();
编辑
If i remove
AsNoTracking()
everything works fine.
1) 如何在 Entity Framework 中正确使用projection
和AsNoTracking
?
2) 是否还有其他选项可以删除对此查询的跟踪?
是否有任何可能的解决方法?
最佳答案
将 ToList()
用于您的导航属性。请注意,它仍会转换到数据库中。 (EF6)
// ..
table2 = x.Table2.Where(g => Some Condition).ToList(),
更新:
对于 EF4,您可能需要手动映射 table2
:
table2 = x.Table2.Where(g => CONDITION).Select(x => new {Foo = x.Bar}),
关于c# - Entity Framework `AsNoTracking` 不适用于匿名投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35271196/