Entity SQL против CreateQuery, где один работает, а другой ошибается для одного и того же запроса

Я могу использовать следующую строку кода для создания запроса, который возвращает только объекты типа «ActivityEntity»....

var q = CreateObjectSet<EntityBase>("EntityBases").OfType<ActivityEntity>()

.. и выполнение запроса работает как положено. Но я хочу создать запрос с использованием синтаксиса Entity SQL и, следовательно, попытался преобразовать приведенное выше в следующий код...

string query = "SELECT it FROM OFTYPE(MyContext.EntityBases, MyNamespace.ActivityEntity) AS it";
var q = context.CreateQuery<DbDataRecord>(query.ToString(), new ObjectParameter[] { });

... за исключением того, что это дает следующую ошибку...

Тип «MyNamespace.ActivityEntity» не найден. Убедитесь, что необходимые схемы загружены и что пространства имен импортированы правильно.

... оба набора кода находятся в одном и том же файле C#, поэтому нет никаких проблем с пространством имен, потому что строго типизированная версия кода работает просто отлично. Любые идеи, как решить эту проблему?

ПРИМЕЧАНИЕ:

Не уверен, имеет ли это значение, но Entity Framework настроен со стратегией генерации кода None, а затем я создал свои собственные классы для использования. Но я пометил их атрибутом EdmEntityTypeAttribute.


person Phil Wright    schedule 18.10.2012    source источник
comment
Это один и тот же проект или есть разные проекты? Вы украсили свои объекты атрибутом EdmEntityType, но добавили ли вы EdmSchemaAttribute в свою сборку? В противном случае атрибут EdmEntityType будет игнорироваться.   -  person Pawel    schedule 18.10.2012


Ответы (1)


Решение оказалось, что мне нужно было убедиться, что CreateObjectSet использовался до создания Entity SQL. Поэтому перед созданием Entity SQL я использую следующий код...

var q = CreateObjectSet<EntityBase>("EntityBases").OfType<ActivityEntity>();

но никогда не используйте сгенерированный 'q'. Простое использование этой строки гарантирует, что контекст Entity Framework знает о существовании коллекции EntityBases и ее производных типов.

person Phil Wright    schedule 18.10.2012