Невозможно привести объект типа «System.Linq.EnumerableQuery`1 [Entities.Test]» к типу «System.Data.Objects.ObjectQuery`1 [Entities.Test] '. - PullRequest
4 голосов
/ 28 февраля 2012

Я использую Entity Framework 4.2 (EntityFramework.dll v4.0.30319) Code First и запрос LINQ, который можно упростить до:

IQueryable<Test> testQuery = from test in repository.Tests select test;

repository.Tests - это IQueryable<Test>, реализованный непосредственно как DbSet<Test> в Enity Framework DbContext.

Я заметил, что мои запросы как-то чувствительны к регистру с учетом без учета регистра в базе данных Microsoft SQL Server. Подозрительно, поэтому я хотел отследить SQL. Но когда я делаю это:

var trace = ((ObjectQuery<Test>)testQuery).ToTraceString();

Я получаю исключение:

Невозможно привести объект типа 'System.Linq.EnumerableQuery 1[Entities.Test]' to type 'System.Data.Objects.ObjectQuery 1 [Entities.Test]'.

Почему это происходит?

1 Ответ

4 голосов
/ 28 февраля 2012

Вы комбинируете два разных API - API ObjectContext и API DbContext. Вы не можете привести запрос, созданный от DbSet к ObjectQuery, но только к DbQuery, который не связан с ObjectQuery.

То, что вы хотите сделать, может быть легко достигнуто:

var trace = testQuery.ToString();
...