所以这个问题可能听起来有点深奥,但我注意到一些“神奇”的东西,我担心引擎盖下发生的事情的表现。假设我使用 TPC 设计创建实体,所有实体(直接或间接)从根基础实体继承,并且根基础实体包含在保存之前在代码中生成的全局唯一标识符(例如 Guid)(即,不是由数据库生成)。
我希望以下代码能够通过查询与对应的泛型类型相关的表来返回一个类型化的动态代理(它确实如此):
context.Set<ConcreteDerivedEntityClass>().Find(someGuid)
但是,我也注意到我可以执行以下操作:
context.Set<BaseEntityClass>().Find(someGuid)
这非常酷,并且会神奇地为正确的具体类的请求 ID 返回一个类型化的动态代理。EF 到底如何知道 Id 属于哪个派生类/表?它是否会查看它知道的每个表/实体类型,直到找到匹配项(因此存在性能问题)?