我有一些非常大的查询,我需要将它转换为linq,因为我们使用的是Entity框架而且我无法使用存储过程(打破与其他数据库的兼容性)。
使用像linqer这样的工具甚至没有帮助,即使我让它使用一些mod来生成linq,也存在巨大的性能问题。
那么,在EF失败的情况下,最好的选择是什么?
请不要让我把它分成小问题,因为那是不可能的。
答案 0 :(得分:3)
将其移至“回答”,因为我想说的内容太长,无法发表评论。
听起来你正在遇到ORM的固有限制。尝试在代码中执行所有操作时,您将无法获得完美的性能。听起来你正在尝试使用像T-SQL接口这样的ORM而不是对象和关系数据实例之间的映射。
您说您希望保持数据库之间的兼容性,但如果您考虑从数据库到数据库的架构差异,那么这已经是一个非易失性。如果您已经实现了架构验证步骤,以确保代码不会中断,那么就没有理由不能使用类似视图的内容。
你可以说你不想整天支持这些事情,但简单的一点是这些事情存在是因为它们解决了某些问题。如果批发放弃它们,那么你真的不能期望摆脱这个问题。有些事情,数据库只是做得更好。
所以,我认为你期望从它无法解决的技术中获得一些东西。您需要重新评估策略或使用其他工具来完成它。我想你甚至可能需要一些不同的工具。
当您的规模较小时,您一直在做的事情可能有效。实际上我可以看到这样的事情工作了很长一段时间。但是,它确实有一个比例限制,我认为你会反对它。
我认为您需要确定要支持的数据库。说“我们支持所有数据库”是站不住脚的。然后,比较功能并使用共同的功能。如果它是MS SQL与MySQL的关系,那么就没有理由不能使用视图或存储过程。
答案 1 :(得分:0)
查看LinqKit - 这是一个非常有用的工具,用于构建复杂的大型EF查询。