0

В «Программирование сущностной структуры», второе издание Джулии Лерман, в главе, посвященной Entity SQL, p. 115, мы имеем следующий пример использования метода построителя запросов, чтобы сделать проекцию с использованием EF 4.1 .Where и .Select с параметрами строки:Entity Framework 6: .Where и .Select, которые принимают параметры строки?

ObjectQuery<DbDataRecord> contacts = context.Contacts 
    .Where("it.FirstName='Robert'") 
    .Select("it.Title, it.FirstName, it.LastName"); 

Я использую Entity Framework 6, .Net 4.6, VS 2015. Компилятор жалуется, что нет .Where и .Select, которые принимают параметры строки, только лямбды. Есть ли какое-то решение, как следовать примеру этой книги?

+0

Похоже, что ваш 'context' является' DbContext' и 'Contacts' является' DbSet', поэтому он не поддерживает Entity SQL. Вы должны использовать 'ObjectContext'. В этой книге также может использоваться «ObjectContext». Жаль, что вы все равно можете получить доступ к базовому «ObjectContext», но тогда вы не можете получить доступ к 'DbSet'. Это означает, что вы сначала должны подготовить «ObjectQuery», прежде чем сможете использовать Entity SQL. – Hopeless

ответ

2

Пример, похоже, о старом ObjectQuery API, который на самом деле не должен использоваться в настоящее время. Это по-прежнему можно использовать с EF6.x, хотя, с чем-то вроде следующего:

ObjectContext objectContext = ((IObjectContextAdapter)conte).ObjectContext; 
ObjectSet<DbDataRecord> objectSet = objectContext.CreateObjectSet<DbDataRecord>("DbDataRecords"); 
// Async version: var res0 = await objectSet.Where("it.FirstName='Robert'").ToListAsync(); 
var res0 = objectSet.Where("it.FirstName='Robert'").ToList(); 

Это говорит, вы действительно должны использовать лямбда вместо с новым DbContext API.

Смежные вопросы