0

我最初认为这个错误是特定于实体框架的。但是现在认为它与BreezeJS的EFContextProvider有关。

我有一个在 Entity Framework 和 Linq-to-sql 中都能正常工作的 linq 查询:

var dc = new EFContextProvider<MyEntities>();
var query = 
    (from t1 in dc.Context.Table1
    where (from t2 in dc.Context.Table2 select t2.TypeID).Distinct().Contains(t1.TypeID)
    select t1);

在执行此查询时,我收到错误:无法创建类型为“Table2”的常量值

但是,如果我直接针对实体框架执行查询:

var dc = new MyEntities();
var query = 
    (from t1 in dc.Table1
    where (from t2 in dc.Table2 select t2.TypeID).Contains(t1.TypeID)
    select t1);

查询成功。

任何帮助,将不胜感激 :)

4

1 回答 1

1

重现并调查该问题后,我们发现错误发生在 EF 中,我们无法修复它。但是,我们发现这种行为是由于查询中的“虚线”路径

dc.Context.Table2

解决方法是简单地避免这种情况:

var dc = new EFContextProvider<MyEntities>();
var dc1 = dc_breeze.Context;

var query = 
    (from t1 in dc.Context.Table1
    where (from t2 in dc1.Table2 select t2.TypeID).Distinct().Contains(t1.TypeID)
    select t1);
于 2013-05-31T19:32:30.570 回答