1

我们在应用程序的 ADO.NET 数据服务中使用查询拦截器,根据用户有权访问的数据过滤每个实体的结果集。但是,我们的一个查询拦截器抛出了以下异常:

内部 .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));
        }

作为黑暗中的刺,我想这将是对产品进行过滤以及对产品进行扩展的组合,但我不确定这如何导致整个事情崩溃。

4

2 回答 2

1

出于某种原因,这有效:

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

有谁知道为什么这会起作用而不是“任何”案例?

于 2009-04-20T07:46:08.367 回答
0

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() 完全是垃圾性能!

于 2010-12-16T00:00:26.577 回答