相关疑难解决方法(0)

ORM(对象关系映射)中的"N + 1选择问题"是什么?

"N + 1选择问题"通常被称为对象关系映射(ORM)讨论中的一个问题,我理解它必须为对象中看起来很简单的事情做出大量的数据库查询.世界.

有没有人对这个问题有更详细的解释?

orm select-n-plus-1

1507
推荐指数
16
解决办法
37万
查看次数

EF Core 延迟加载速度极慢

我做了一个小测试,启用惰性loading.optionsBuilder.UseLazyLoadingProxies().UseSqlServer(ConnectionString);

(使用 EF Core 2.1.4)

我循环浏览有和没有的仪器,这是我得到的结果

情况1

var instruments = db.instruments.OrderBy(t=>t.id).Include(t=>t.NavPro1).ThenInclude(t=>t.NavPro2).Take(200);
Run Code Online (Sandbox Code Playgroud)

案例2

var instruments = db.instruments.OrderBy(t=>t.id).Include(t=>t.NavPro1).ThenInclude(t=>t.NavPro2).Take(200);
Run Code Online (Sandbox Code Playgroud)

然后

   foreach (var i in instruments)
   {
        var props = i.NavPro1;
        foreach (var prop in props)
        {
            sbPrintGreeks.AppendLine(prop.NavPro2.Name + " - " + prop.id + " - " + prop.Value);
        }
   }
Run Code Online (Sandbox Code Playgroud)

无需延迟加载,只需 7 秒即可获取 100k 行

使用延迟加载需要 160 秒才能获取 3k 行。

可以做些什么来获得良好的性能?

c# ef-core-2.1

6
推荐指数
1
解决办法
4144
查看次数

我必须在 Entity Framework 6 中为 DbContext 使用“Using”块吗

这个问题不是关于 c# 一般的“使用”,而不是关于何时/为什么使用它等等。

问题是,DBContext 对象是否自己处理连接,因此我不需要使用using它来处理它,没有关于它的问题,所以不要将其标记为重复

using (DBContext db = new DBContext())
{
    var Order =  db.Order.First(r => r.OrderID == 6);
    Order.Type = 6;
    db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

或者不使用

DBContext db = new DBContext();
var Order =  db.Order.First(r => r.OrderID == 6);
Order.Type = 6;
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

因为我在这个来源中看到using没有必要,最好不要使用它。

实体框架会为我处理连接吗?

c# entity-framework dbcontext entity-framework-6

5
推荐指数
1
解决办法
1184
查看次数