0

我对 Linq to Entities 有一个奇怪的问题,有时会生成带有重复的图形。使用包含的查询,在请求的图的基础上有一个简单的限制,不会生成重复项。

当同一查询与图表中其他地方的另一个限制一起使用时,我有重复项。

考虑下图:

Entity1
  Entity2
    Entity3
      Entity4
         Entity5
           Entity6
      Entity7
      Entity8

现在,这个查询:

var query = context.Entity1.Where(u => (u.StringProp.StartsWith(someValue)));
query = query.Include(@"NavpropEntity2.NavPropEntity3.NavPropEntity4.NavPropEntity5.NavEntity6");
query = query.Include(@"NavpropEntity2.NavPropEntity3.NavPropEntity7");
query = query.Include(@"NavpropEntity2.NavPropEntity3.NavPropEntity8");

不会为图中的 entity6 生成重复项。

但是下面的查询可以!

query = context.Entity1.Join(context.Entity3, u => u.Entity2.Entity3.Entity4Id, g => g.Id, (u, g) => new NotSoAnonymousTypeWithParameterLessConstructor { Entity4= g, Entity1 = u })
                                .Where(
                                    ApplyNotSoAnonymousTypeRestrictions(
                                    StringProp,
                                    Id)
                                ).Select(z => z.Entity1);
    query = query.Include(@"Navprop1.NavProp2.NavProp3.NavProp4.NavProp5");
    query = query.Include(@"Navprop1.NavProp2.NavProp3.NavProp6");
    query = query.Include(@"Navprop1.NavProp2.NavProp3.NavProp7");

为 Entity6 生成副本。

请注意,实体图在 linq 查询的末尾有问题。所以这是一个 EF/STE 问题而不是 STE 问题。

这是在将图表发送回服务器以保持更改时发出的,如本文中所述。

我希望有人遇到同样的问题并找到了解决方案。TIA。

4

1 回答 1

0

使用 EF5 中引入的 AsNoTracking() 扩展时会出现问题。这与查询结构无关。我的数据访问代码是从模板 (.tt) 生成的,我们今天遇到了同样的问题,我能够将一种不返回重复项的方法与另一种返回的方法进行比较。唯一的区别是。

于 2013-01-16T13:44:31.093 回答