【发布时间】:2011-09-05 21:31:36
【问题描述】:
我正在将一个旧应用程序从 WebForms 移植到 MVC,其中一部分过程是拆除现有的数据层,将逻辑从存储过程转移到代码中。因为我最初只使用基本的 C# SQL 函数 (System.Data.SqlClient),所以我使用了一个轻量级的伪 ORM (PetaPoco),它只将一条 SQL 语句作为字符串并执行它。构建动态查询在 SQL 中的工作方式大致相同 - 大量添加和删除附加代码的条件(平均查询有大约 30 个过滤器)。
所以看了一圈之后,我找到了一些选择:
- 根据需要添加查询位的一组字符串和条件。真的很讨厌,尤其是当查询变得复杂时,如果存在更好的解决方案,我不想追求。
- A bunch of conditionals using L2E。看起来更优雅,但我测试过 L2E 实在是太臃肿了,总体来说是一种糟糕的体验。我可以在 L2S 中做同样的事情吗?如果是这样,L2S 会在未来 5-10 年内持续存在吗?
- 使用PredicateBuilder。仍在研究这个,关于 L2S 的相同问题。
- 编辑:我也可以坚持现有的存储过程模型,但无论如何我都必须重写它们,所以看看其他选项不会有什么坏处,因为我仍然需要做腿部工作。
还有其他选择吗?任何人都可以对上述任何一种方法有一些经验吗?主要是,您选择的方法是否让您想要构建一台时间机器并为实现它而杀了你?
【问题讨论】:
-
只是我的两分钱,当 EF4 发布时,我真的很兴奋。现在在过去一年使用它之后,我对臃肿、某些建模场景的复杂性以及生成的 SQL 感到非常不满。我再也不会使用 EF 了——存储过程在顶部一直带有一个精简的 API。不回答你的问题 - 但我想加我两分钱。
-
从 .Net 3.5 开始,流行的观点认为 L2S 生成的 sql 比 L2E 更高效。我不知道这是否随着 L2E 的更新而改变(包括 .net 4.0 及之后的版本)。在 L2S 中测试相同的条件应该是相当简单的。 您是否考虑过只保留当前的存储过程?
-
@jlnorsworthy - 这当然是一个选项,我应该在上面添加它(我会编辑它)。重要的是,无论我选择什么选项,它们都需要重写(它们非常复杂且速度慢得令人痛苦),所以现在是货比三家看看替代方案是什么样子的好时机。
-
您能否详细说明“L2E 过于臃肿,总体而言是一种糟糕的体验”?
-
也许这应该是社区维基?好像不会有具体的答案……