每当我听到像“公司已经标准化使用EF4或EF5,或者其他什么”的说法时,我就会感到寒意袭人。
这相当于一家汽车租赁公司说:“我们已经为整个车队标准化了一种汽车型号。”
或者一个木匠说:“我已经将凿子作为我的整个工具箱的标准。我不会使用锯子、钻头等等。”
有一种叫做正确的工具用于正确的工作的道理。这种说法只能说明负责制定关键软件架构决策的人对软件架构一无所知。
如果你正在处理超过100K条记录,并且数据模型很复杂(即非平凡的),那么也许EF6不是最佳选择。
EF6基于动态反射的概念,并具有类似于Castle Project Active Record的设计模式。
你需要将所有的100K条记录加载到内存中并对其执行操作吗?如果是,请问自己是否真的需要这样做,为什么不能在100K条记录上执行存储过程来实现同样的效果。进行一些分析,看看实际的数据使用模式是什么。也许用户执行搜索返回了100K条记录,但他们只浏览了前200条。例如谷歌搜索,几乎没有人会翻过数百万条搜索结果的第三页。
如果答案仍然是肯定的,那么您需要将所有的10万条记录加载到内存中并执行操作。然后,也许您需要考虑其他一些东西,比如使用轻量级对象构建的自定义写入缓存。也许是惰性加载嵌套对象指针等等。我使用这样的一个实例是大型电子商务网站的产品目录,其中对目录执行非常大量的搜索。为什么呢?为了提供自定义行为,例如早期退出搜索,并使用预编译的正则表达式进行正则表达式通配符搜索,或者使用自定义哈希表索引到产品目录中。
对于这个问题,没有一个适合所有情况的答案。这完全取决于数据使用场景以及应用程序如何处理数据。考虑大猩猩和鲨鱼谁会赢?这完全取决于环境和上下文。
也许EF6对于需要动态反射的某个部分来说是完美的,而NetTiers对于需要静态反射和可扩展ORM的另一个部分来说更好。而低级别的ADO可能最适合极高性能的部分。