[英]Entity Framework Slow First Call IRepository DbContext
我們將實體框架6.1.1與下面的DbContext和EntityTypeConfiguration一起使用,以將大約400個實體映射到我們的DbContext。 然后,我們創建DbContext的實例,並使用它為我們在服務層中使用的每個IRepository實體創建對象集。 我遇到的問題是我找不到解決方案,這是在使用Ants Profiler時,第一次調用數據庫大約需要18秒。
我已經研究過生成視圖,但是當DbContext不包含對實體的硬編碼DbSet集合時,我找不到找到該視圖的方法。 有沒有一種方法可以使用我們的模式預先生成視圖,如果可以的話,我們是否會看到性能上的顯着改善?
還是該走上一條不同的道路了,我們是否應該創建較小的DbContext,這些DbContext用於邏輯分離的數據庫特定區域?
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;
}
}
}
基於實體模型生成視圖是應用程序首次執行查詢時的重大成本。 使用EdmGen.exe實用工具將視圖預先生成為Visual Basic或C#代碼文件,可以在設計過程中將其添加到項目中。 您還可以使用“文本模板轉換工具包”來生成預編譯的視圖。 預生成的視圖在運行時進行驗證,以確保它們與指定實體模型的當前版本一致。 有關更多信息,請參見如何:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.