c# - Entity Framework `AsNoTracking` 不适用于匿名投影

标签 c# .net entity-framework linq anonymous

在下面的片段中,我尝试使用 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 useAsNoTracking() data from the inner tables (table2,3) is lost during the conversion at this line var result = myprojection.Select(g =>g.table1).FirstOrDefault();

编辑

If i remove AsNoTracking() everything works fine.

1) 如何在 Entity Framework 中正确使用projectionAsNoTracking

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/

相关文章:

c# - 如果项目是由 SharpDevelop 生成的,则 OpenFileDialog 会被 Norton Antivirus 阻止

.net - 后台工作线程导致 UI 挂起

c# - 寻找错误的命名空间?

c# - 使用 Entity Framework 是否有更简洁或优雅的方法将多个参数传递给 SQL 存储过程?

c# - 如何解决 EF 生成 SQL 语句嵌套太深的问题

c# - async void 事件处理程序 - 澄清?

c# - 如何使用 CefSharp WinForms 更改 URL

c# - 使用 ASP.NET 在 Windows Azure Blob 存储上设置 CORS

c# - 在 python 中锁定字典

entity-framework - EF6 迁移 (LocalDb) 更新数据库登录失败