我们使用的实体框架6.1.1与像下面这样的DbContext和EntityTypeConfiguration一起将大约400个实体映射到我们的DbContext。然后,我们创建一个DbContext实例,并使用它为我们服务层中使用的每个IRepository实体创建对象集。我们无法找到解决方案的问题在于,当我们使用蚂蚁探查器时,第一次调用db需要大约18秒的时间。实体框架缓慢的第一次调用IRepository DbContext
我已经看过生成的意见,但我不能找到一种方式来做到这一点,当DbContext不包含硬编码的DbSet集合的实体。有没有办法用我们的模式预先生成视图,如果有的话,我们会看到显着的性能改进?
或者现在是时候走上另一条路,我们应该创建更小的DbContexts用于逻辑分隔上数据库的特定区域吗?
public class Context: DbContext
{
#pragma warning disable
Type dummyType_SqlProviderServices = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
#pragma
static Context()
{
Database.SetInitializer(new ContextatabaseInitializer<Context>());
}
public Context(DbConnection con)
: base(con, false)
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.AddFromAssembly(typeof(ZincContext).Assembly);
base.OnModelCreating(modelBuilder);
}
}
public class EntityRepository<T> : IEntityRepository<T> where T : class
{
protected IDbSet<T> ObjectSet
{
get
{
if (_objectSet == null)
{
_objectSet = this.DbContext.Set<T>();
}
return _objectSet;
}
}
}
你使用AsNoTracking吗? – 2014-10-04 10:21:23
我们并不是没有,因为我们利用实体跟踪进行更新和延迟加载。话虽如此,我们可以放弃这种模式,因为我不喜欢这些实体继续为数据库提供延迟加载的句柄,并确保我们调用存储库上的Update方法来重新连接实体。它会产生显着的性能差异吗? – user351711 2014-10-04 10:25:09
是的,会的。实体框架会导致显着的性能问题,特别是首次调用需要很长时间。但是你可以找到很多关于这方面的资源,例如关掉AsNoTracking,当你不需要它或像预编译的查询等somothing – 2014-10-05 06:49:34