Перехватчики запросов throw: Связанные сущности нельзя указывать для конструкторов сущностей, которые не являются частью представления сопоставления запросов для набора сущностей - PullRequest
1 голос
/ 17 апреля 2009

Мы используем перехватчики запросов в ADO.NET Data Services в нашем приложении для фильтрации результирующего набора для каждого объекта на основе данных, к которым у пользователя есть доступ. Однако я получаю следующее исключение из одного из наших перехватчиков запросов:

Внутренняя ошибка поставщика данных .NET Framework 1004, 0, Связанные объекты нельзя указывать для конструкторов сущностей, которые не являются частью представления сопоставления запросов для набора сущностей.

Когда / почему выдается это исключение?

Чтобы добавить контекст к этому сообщению, я использую следующие критерии фильтра в своем URL:

$ filter = (OnlineItems / Products / ProductId eq 856)

где перехватчик запроса:

        [QueryInterceptor("OnlineItems")]
        public Expression<Func<OnlineItems, bool>> QueryOnlineItems()
        {
            return item => (item.Products.Any(p => p.Price > 10));
        }

Как удар в темноте, я бы подумал, что это будет комбинация фильтрации по Продуктам, а также расширения по Продуктам, но я не уверен, как это приведет к падению всего этого.

Ответы [ 2 ]

1 голос
/ 20 апреля 2009

По какой-то причине это работает:

[QueryInterceptor("OnlineItems")]
public Expression<Func<OnlineItems, bool>> QueryOnlineItems()
{
    return item => (item.Products.Count(p => p.Price > 10) > 0);
}

Кто-нибудь знает, почему это сработает, а не "Any"?

0 голосов
/ 16 декабря 2010

EF CTP5 все еще имеет эту ошибку! В любом случае, сейчас есть простой обходной путь

[QueryInterceptor("OnlineItems")]
public Expression<Func<OnlineItems, bool>> QueryOnlineItems()
{
    return item => item.Products.FirstOrDefault(p => p.Price > 10) != null;
}

Подробнее здесь: http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/b5c49e69-3b5f-4606-8b40-4025dc8e5cb1?prof=required

Имейте в виду, что Count () - это полная производительность мусора!

...