【问题标题】:Are there disadvantages bypassing DBSet when calling Find,Add,Update etc. on the context?在上下文中调用 Find、Add、Update 等时绕过 DBSet 是否有缺点?
【发布时间】:2020-08-13 12:56:19
【问题描述】:

在上下文中调用 Find、Add、Update 等时绕过 DBSet 是否有缺点?

创建或获取 DBSet 需要花费一些时间。据我所知,Add、Update、Remove 方法仅将实体的 EntityState 设置为已添加、已修改、已删除,并且不执行任何其他操作。真正的动作将在调用 SaveChanges(Async) 时执行。 所以问题仍然存在:如果可能,省略 DbSet 是否好?见第一个例子。

打电话

dbContext.Find(typeof(TEntity), id);
dbContext.Add(entity);
dbContext.Update(entity);
dbContext.Remove(entity);
...

而不是

dbContext.Set<TEntity>.Find(id);
dbContext.Set<TEntity>.Add(entity);
dbContext.Set<TEntity>.Update(entity);
dbContext.Set<TEntity>.Remove(entity);

【问题讨论】:

    标签: c# entity-framework-core ef-core-3.0 entity-framework-core-2.2 entity-framework-core-3.1


    【解决方案1】:

    由于结果缓存,Set&lt;TEntity&gt; 方法的后续调用很便宜。与整个 EF 开销相比,第一次调用也没有那么昂贵。

    Set&lt;TEntity&gt; 返回InternalDbSet&lt;TEntity&gt;,其AddUpdate 等只是将调用重定向到set 的上下文。

    因此,没有任何显着差异。

    参考见:
    https://github.com/dotnet/efcore/blob/master/src/EFCore/DbContext.cs https://github.com/dotnet/efcore/blob/master/src/EFCore/Internal/InternalDbSet.cs

    【讨论】:

      猜你喜欢
      • 2016-03-28
      • 1970-01-01
      • 1970-01-01
      • 2015-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      相关资源
      最近更新 更多