Свойства частичного класса недоступны через запрос LINQ, привязанный к GridView
Я добавил частичный класс к классу, созданному Entity Framework. Я хотел добавить вычисляемое поле, которое я мог бы привязать к своему GridView. Однако, когда я пытаюсь получить доступ к новому свойству, я получаю сообщение об ошибке, что это ограничение для Entity Framework.
Существуют ли какие-либо обходные пути для достижения этой цели?
1 ответ:
Без просмотра вашего кода будет невозможно правильно диагностировать вашу проблему. Однако у меня есть предчувствие...
Создание частичного класса и добавление к нему вычисляемого свойства не является проблемой вообще. Привязка этого же свойства к GridView также не является проблемой, потому что GridView не волнует, пока свойство является общедоступным, и доступ к нему сам по себе не создает исключение.
однако..... возможно, вы пытаетесь использовать это свойство в запросе. Entity framework и любой другой ORM будет блевать на этот, потому что нет трансляции этого свойства в базовое хранилище данных (вероятно, SQL Server). Поэтому, когда EF пытается построить SQL, необходимый для запроса базы данных, он пугается и говорит "я понятия не имею, как превратить это свойство в допустимый SQL"
Убедитесь, что вы не используете это свойство в запросах, и все будет в порядке.
Обновление:
Если вы действительно хотите иметь возможность использовать вычисляемый столбец в результирующем наборе, то у вас есть два основных варианта:
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;
Comments