仅用于存储过程的 ORM:首选工具

Posted

技术标签:

【中文标题】仅用于存储过程的 ORM:首选工具【英文标题】:ORM for Stored procedure only: preferred tool 【发布时间】:2013-01-22 16:08:35 【问题描述】:

通常我使用 Entity Framowrk 作为我的 ORM 工具。 而且我真的很喜欢“功能导入”功能和代码生成器。

但是一旦我读到一本很厚很严肃的书,使用 EF 只调用 SP 并不是一个好主意。

作者只忘记了一点:什么工具最适合这种数据库调用策略?

【问题讨论】:

您在将EF 与存储过程一起使用时是否遇到了一些问题?有什么不工作?慢吗?为什么要更改 ORM? 它'好的,我非常喜欢它。但是......我在我的部门并不孤单:) 【参考方案1】:

如果您花时间学习 EF 并且它对您有用,请坚持下去。或者,对于大多数项目来说,像 Dapper、Massive 和 PetaPoco 这样的微型 ORM 就足够了。例如,Dapper 被开发用于 @ StackExchange 我相信 - 它现在是开源的。

【讨论】:

【参考方案2】:

查看 BLToolkit,与 EF 相比学习曲线非常低

还可以查看这个 Blt 扩展 -> bltoolkit-storedprocedures2csharp-t4/ 使用 T4 模板为您的存储过程生成函数

普通的 Bltoolkit

using(var db = new DbManager())

  return db
    .SetSpCommand(
      "Person_SaveWithRelations",
      db.Parameter("@Name", name),
      db.Parameter("@Email", email),
      db.Parameter("@Birth", birth),
      db.Parameter("@ExternalID", exId),
    )
    .ExecuteObject<Person>();

带有扩展名

using (var db = new DataManager())

  return db
    .Person
    .SaveWithRelations(
      name,
      email,
      birth,
      exId
    )
    .ExecuteObject<Person>();

(免责声明:我自己没有使用扩展,因为我没有很多 SP)

【讨论】:

【参考方案3】:

我认为来自Microsoft Enterprise Library 的数据访问块是最佳选择。我在几个项目中使用它来仅使用存储过程来查询外部数据库。最新版本的配置非常简单,使用方便。它也不会为您提供额外的功能,并且只提供您需要的东西。 如果您想在配置和使用方面简单快捷,请使用它,这是我的建议。

【讨论】:

【参考方案4】:

尝试使用 BLToolkit - 它是开源的,允许将对象映射到存储过程参数并将存储过程输出映射到对象而没有任何问题

bltoolkit home bltoolkit sources

【讨论】:

以上是关于仅用于存储过程的 ORM:首选工具的主要内容,如果未能解决你的问题,请参考以下文章

轻量ORM-SqlRepoEx 存储过程操作

使用 ORM 工具(框架)有啥好处?

代码生成器与 ORM 与存储过程

orm中使用存储过程

在 Django 的 ORM 中访问存储过程的最佳方法是啥

6Python全栈之路系列之MySQL存储过程