Чтобы уточнить ответ Дэвида:
Какой запрос вы использовали для получения идентификаторов 28k?Это запрос, который вы должны объединить с этим запросом.Выборка идентификаторов работает хорошо для сравнительно небольших # идентификаторов, а не 28 КБ.Если вы правильно настроите отношения в EF, вы можете избежать явных объединений.EF - это не просто оболочка для замены SQL.Несмотря на то, что вы можете написать его с явными объединениями между отключенными объектами, он намного более эффективен, если настроен как ORM, где связанные объекты знают друг о друге.Ваше выражение EF должно выглядеть примерно так:
var leadsQuery = context.leads
.Include(l => l.Config)
.Where(l => l.eventID == 1234
&& /* Insert criteria to determine which Leads to return. /*);
Положения where для вставки - это , а не из IEnumerable из идентификаторов.Это прекрасно работает для небольшого количества строк.Вместо этого это должны быть критерии, которые вы использовали для получения этих идентификаторов.
Свинец должен иметь ссылку на Конфиг.Не нужно объявлять DbSets для каждой таблицы, а затем указывать EF присоединиться к ним.Если ведущая таблица имеет ConfigId, то:
public class Lead
{
//...
public virtual Config Config { get; set; }
}
, тогда, если это ядро EF, настройте отображение: (IEntityTypeConfiguration или OnModelCreating)
builder.Entity<Lead>()
.HasOne(x => x.Config)
.WithMany() // Lead has a config, Config does not have a collection of Leads.
.HasForeignKey("ConfigId"); // Creates a shadow property for the FK.
или EF 6
builder.Entity<Lead>()
.HasRequired(x => x.Config)
.WithMany()
.Map(x => x.MapKey("ConfigId")); // Similar to above. Set up the relationship without a FK in the entity, map directly to the table.
Используя .Include(l => l.Config)
, вы можете получить доступ к свойству lead.Config, чтобы получить Config для этого отведения.Нет необходимости писать запросы, чтобы возвращать лиды, конфиги и другие данные отдельно.Вам не нужно .Include()
связанных сущностей для запроса к ним, однако, если вы хотите получить доступ к этим сущностям после запроса через свойства, вы должны использовать .Include()
, чтобы избежать дополнительных отложенных вызовов обратно в базу данных.(Мощная функция EF, но дорогая, если не использовать ее осторожно.)