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。