У нас есть огромная база данных с 770 таблицами и вы хотите провести тестирование производительности с помощью EF 6.1x.Entity Framework 6 DBContext с только подмножеством всех таблиц
Мы хотим запросить только 5 из этих 770 таблиц. Возможно ли создать «легкий» DBC-текст только с 5-6 сущностями/DBSets вместо использования полного контекста 770-tables?
Когда мы используем полный контекст, простой запрос с 4 соединением занимает 45 секунд. Это 44 секунды слишком долго. Мы используем код-первый (с обратной обработкой).
Проблема: Когда мы создаем такую «легкую» версию полного контекста (то есть 5 таблиц только), EF жалуется, что все остальные лица, которые так или иначе связанные с этими 5 таблиц есть недостающие ключи. Мы отображаем только ключи, свойства, отношения для этих 5 таблиц, но не остальные.
Поскольку запрос, написанный в LINQ, запрашивает только 5 таблиц, EF должен просто игнорировать остальные 765 таблиц, но это не будет. Почему бы и нет? LazyLoading = true/false, похоже, не имеет никакого отношения к этому.
Примечание: Очевидно, можно создать представление в БД, которое делает то, что мы делаем в коде с запросом LINQ. Вопрос в том, может ли это быть сделано с «легким» DbContext, как указано выше.
Там в "свет" версия контекста:
public class ItemLookupContext : DbContext
{
static ItemLookupContext()
{
Database.SetInitializer<ItemLookupContext>(null);
}
public ItemLookupContext()
: base("Name=ItemLookupContext")
{
//Configuration.LazyLoadingEnabled = true;
}
public DbSet<Identity> Identities { get; set; }
public DbSet<Item> Items { get; set; }
public DbSet<Price> Prices { get; set; }
public DbSet<Department> Departments { get; set; }
public DbSet<Brand> Brands { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new IdentityMap());
modelBuilder.Configurations.Add(new ItemMap());
modelBuilder.Configurations.Add(new PriceMap());
modelBuilder.Configurations.Add(new DepartmentMap());
modelBuilder.Configurations.Add(new BrandMap());
//ignore certain entitities to speed up loading?
//does not work
modelBuilder.Ignore<...>();
modelBuilder.Ignore<...>();
modelBuilder.Ignore<...>();
modelBuilder.Ignore<...>();
modelBuilder.Ignore<...>();
}
}
Это, безусловно, возможно и на самом деле рекомендуется. В больших средах баз данных часто увеличение производительности имеет несколько разных контекстов для подмножеств таблиц. – DavidG
Некоторый код был бы полезен для понимания вашей проблемы, но я бы предположил, что вы ищете что-то вроде http://stackoverflow.com/questions/17246069/multiple-dbcontexts-on-one-db-with-code-first-migrations? – fuchs777
- простой запрос первого из exe, то есть одного запроса, вызывающего построение контекста? – tschmit007