1

我在 ORM (Bltoolkit) 中以字符串格式使用 sql。我不喜欢在不需要的情况下使用 Linq,因为

  • 复杂的查询很难用 Linq 构建。没有足够的资源来使用 Linq 构建复杂的查询。
  • 通过将字符串 sql 与 ORM 结合使用,您仍在改进 sql 查询的实践。否则你会中断查询(我想 Linq 不会改进你的 sql 查询)。
  • 您仍然可以使用绑定参数保护您的查询免受 sql 注入的影响。

你有什么想法?这是一个好习惯吗?

下面是在没有 Linq 的情况下使用 ORM(对我来说是 BlToolkit)的示例:

        var db = new Veritabani("HstConn");

        try
        {
            var sorgu = @"select t.tcno ""KullaniciAdi"", t.ad ""Ad"", t.soyad ""Soyad"", t.kurum_kodu ""KurumKodu"", 
                                 t.ilkodu ""IlKodu"", t.kurum_turu ""KurumTuru"", t.e_posta ""Eposta"", t.dogrulama_kodu ""DogrulamaKodu""
                            from saglikcalisanlari t
                           where tcno = :kullaniciAdi
                             and sifre = :sifre";

            return db.SetCommand(sorgu,
                                 db.Parameter(":kullaniciAdi", kullaniciAdi.Trim()),
                                 db.Parameter(":sifre", sifre.Trim().Md5Hash())).ExecuteObject<SaglikCalisani>();
        }
        catch (Exception exc)
        {
            throw new Exception("Veritabanı Hatası: " + exc.Message);
        }
        finally
        {
            db.Close();
            db.Dispose();
        }
4

3 回答 3

2

这将始终是主观的和上下文相关的。也许真正的问题是“你会真正针对不同的数据库”。如果答案是“否”,那么固定 SQL 很可能没问题。如果您需要针对多个不同的后端,那么像 HQL 或 ESQL 这样的抽象可能更合适 - 这与 LINQ 不同,但仍然独立于平台...... ish。

在很多情况下,您需要手动调整 SQL,因为坦率地说,在复杂的情况下,开发人员将在 10 次中 9 次胜过生成器(LINQ 等)(根据欧盟发明统计部门的一项研究) .

只要您正确参数化,SQL 本身在这些情况下就可以了。

stackoverflow.com广泛使用手写 TSQL ,因为:

  • 我们没有改变后端的计划,如果我们这样做的话:查询只是冰山一角
  • 我们真的很关心性能:
    • 解析表达式树 (LINQ) 或 DSL (HSQL/ESQL) 以生成 TSQL 需要时间
    • 我们希望 TSQL 编写良好并进行定制测试
    • 即使使用预编译的 LINQ 查询,我们也确实在使用的工具中看到了衡量的性能问题
  • 我们编写了自己的工具(“dapper”)来删除我们并非绝对需要的所有功能- 使其简单地查询输入,输出对象
  • 以及我们自己的工具(“mini-profiler”)来监控网站上的实时性能
于 2013-05-31T11:04:07.180 回答
1

是的,您提到的原因非常适合选择字符串格式,在性能方面,您会发现虔诚地选择一个几乎没有什么区别。

想法是使用可以提高您的工作效率的工具,而不会要求您放弃应用程序的性能。

就像如果你喜欢 LINQ 上的 SQL 查询并且更喜欢它,我看不出有任何缺点,另一方面,如果你不使用 LINQ,因为它占用了你很多时间,而且你发现很难推动努力学习它。除非您可以比较您的工具,否则您无法选择最适合这项工作的工具。

于 2013-05-31T11:14:42.250 回答
0

看看NPoco——它基于 PetaPoco,但最近进行了一些增强。

使用 SQL 字符串生成器构建 SQL 字符串要容易得多,如果您愿意,最新版本还可以使用 LINQ。

于 2013-05-31T11:16:59.767 回答