Частичные свойства класса недоступны через запрос LINQ, связанный с GridView - PullRequest
3 голосов
/ 30 августа 2010

Я добавил частичный класс в класс, созданный Entity Framework. Я хотел добавить вычисляемое поле, которое я мог бы привязать к своему GridView. Однако, когда я пытаюсь получить доступ к новому свойству, я получаю сообщение об ошибке, что это ограничение Entity Framework.

Есть ли способы обойти это?

1 Ответ

8 голосов
/ 30 августа 2010

Без просмотра вашего кода будет невозможно правильно диагностировать вашу проблему. Впрочем, у меня есть догадка ...

Создание частичного класса и добавление к нему вычисляемого свойства вовсе не проблема. Привязка этого же свойства к GridView также не является проблемой, потому что GridView не заботится, если свойство общедоступно и доступ к нему сам по себе не вызывает исключения.

Однако ... Возможно, вы пытаетесь использовать это свойство в запросе. Платформа сущностей и любой другой ORM будут смущены этим, потому что нет преобразования этого свойства в базовое хранилище данных (возможно, SQL Server). Поэтому, когда EF пытается создать SQL, необходимый для запроса к базе данных, он сходит с ума и говорит «Я понятия не имею, как превратить это свойство в действительный SQL»

Убедитесь, что вы не используете это свойство в своих запросах, и с вами все будет в порядке.

UPDATE:

Если вы действительно хотите использовать вычисляемый столбец в наборе результатов, у вас есть два основных варианта:

1.) Создайте представление в базе данных с вычисляемым столбцом и привяжите к нему свою сущность вместо исходной базовой таблицы. Ваша собственность теперь будет законно привязана к чему-то, к чему можно обратиться.

2.) Убедитесь, что вы выполнили свой запрос и сначала вернули полный (нефильтрованный) набор результатов, а затем использовали обычный LINQ to Object, чтобы получить то, что вы хотите. Примерно так:

var query = from o in Context.Orders
            where o.Price > 100
            select o;

var orders = from order in query.ToList() // Force query to execute
             where order.ComputedColumn == 42
             select order;

Очевидно, что это менее эффективно, чем первый вариант, но не может быть ужасным в зависимости от исходного запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...