我们正在使用实体框架6.1.1和下面的DbContext以及EntityTypeConfiguration将大约400个实体映射到我们的DbContext。然后,我们创建DbContext的一个实例,并使用它为我们在服务层中使用的每个IRepository实体创建对象集。我们无法找到解决方案的问题是,当我们使用Ants剖析器时,对db的第一次调用大约需要18秒。
我已经考虑过生成视图,但是当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;
}
}
}
答案 0 :(得分:0)
在应用程序首次执行查询时,基于实体模型生成视图是一项重大成本。使用EdmGen.exe实用程序将视图预生成为可在设计期间添加到项目中的Visual Basic或C#代码文件。您还可以使用文本模板转换工具包来生成预编译的视图。预生成的视图在运行时进行验证,以确保它们与指定实体模型的当前版本一致。有关更多信息,请参见如何:
Pre-Generate Views to Improve Query Performance (Entity Framework)
Isolating Performance with Precompiled/Pre-generated Views in the Entity Framework 4
ENTITY FRAMEWORK CODE FIRST VIEW GENERATION TEMPLATES ON VISUAL STUDIO CODE GALLERY