我有两个实体,它们被链接为一对多。 我希望通过主实体的主键获取依赖实体。
场景1
我正在调用依赖实体并通过外键获取它。
类似 context.dependentEntity.where(entity => entity.foreignKey == PKMainEntity)
情景2。
我正在调用主实体并获取依赖实体。
类似 context.mainEntity.find(PKMainEntity).select(x=>x.dependentEntity)
主键默认有索引;
什么情况更快?
答案 0 :(得分:0)
在场景1 中,您可以获取所有您不需要的内容。所以这是首选方式。
在场景2 中,您有两个数据库调用。
与完全相同var entity1 = context.mainEntity.find(PKMainEntity); var dependents = entity1.DependentEntities;
第二个调用通过延迟加载加载依赖实体。
第三种方式是
context.mainEntity.Where(entity => entity.Key == PKMainEntity)
.SelectMany(e => e.DependentEntities)
这也将执行一个查询。它甚至可能使EF与第一个查询相同。当从属实体没有对主实体的反向引用时,此表单可能会派上用场。
对于多对多关联,这是一种有效的方式来获得许多"许多"根实体的实体(例如,产品的类别)。