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