【问题标题】:What ways are available for me to query my SQL Server relational database from Web API?我可以通过哪些方式从 Web API 查询我的 SQL Server 关系数据库?
【发布时间】:2026-01-06 09:30:01
【问题描述】:

我一直在查看 Microsoft 示例并且大多数使用实体框架。但是,当我需要快速连接时,这似乎有点过分了。从报告中获取一些数据并将其返回到我的网页。编写复杂的 SQL 等可能需要多表连接和一些输入参数的东西似乎也很困难。

那么还有哪些其他选择?

【问题讨论】:

  • 如果您不喜欢 Entity Framework,您可以使用 ado,datareader 非常快,您可以使用它填写您的列表或数据表。同样使用 .net,我相信您可以从 sql 中更轻松地处理情况,您可以更轻松地调试它们。
  • 您建议的“from sql”解决方案是什么?我的应用程序的某些部分也已经使用了 EF,但我注意到做复杂的事情并不是那么容易。我不是在寻找替代品。只是连接到数据库的其他方式。
  • 就我个人而言,我正在使用数据阅读器(简单而快速)来填补我的课程。 Datareader 从 sql 命令填充。因此,在命令文本中,您可以编写您想要的任何 sql 或过程。因此,一旦您拥有数据 .net,就可以非常轻松地管理它们。
  • DataReader - SqlDataReader - 是唯一的方法 - 其他东西都建立在它之上;)答案是固执的 - 例如,除非有充分的理由,否则我们在公司的任何地方都使用 EF,无论如何琐碎的项目。而你的“复杂”是我们很容易的——如果我们重构映射,我们会得到编译错误,而不是运行时错误,因为 SQL 不再符合现实。
  • @SamanthaJ - 是的。只要我不使用查询生成器,我总是使用 EF 或其他 LINQ 提供程序,因为我真的更喜欢编译器告诉我在运行时错误报告的字段更改后我的查询是废话。 EF 和其他工具完全能够不引入实体。对于 EF,它很简单 - 不要求实体,而是投影到非实体(Select (x=>new {}) 并且不会加载任何实体。即使有更大的数据分析,我也会使用 EF,尽管有调用SP 和使用视图。

标签: c# asp.net sql-server asp.net-mvc asp.net-web-api


【解决方案1】:

如果您想快速连接到数据源,可以查看一些微型 ORM 框架:

https://code.google.com/p/dapper-dot-net/

https://github.com/robconery/massive

http://www.toptensoftware.com/petapoco/

这些都是微型库,允许您编写自己的 SQL,但仍然可以帮助您(一点)将结果映射到类。

【讨论】:

  • 在阅读了您在我的帖子上发布的comment 之后,我对您的回答感到惊讶。
【解决方案2】:

这是我们为使用 Web Api 和 SQL 获取数据的报告应用程序所做的。

1.带有 EF 的存储过程

由于您提到您需要获取可能需要多表连接的数据,因此这里最好的方法是使用存储过程来获取该数据。将该存储过程导入到 EntityFramework。

2。服务层类和 AutoMapper

现在创建一个类似的对象,该对象将映射到数据层的对象,该对象将从您刚刚添加的存储过程中返回。为了映射这两个类,我们使用称为AutoMapper 的映射器。我们创建了两个类,因为我们不希望我们的网络应用直接访问数据层类。

3.公开您的 Web API

现在这些数据可以从 api 发送给任何想要使用它的人。

希望这会有所帮助。

【讨论】:

  • 当您甚至不知道需求是什么时,为什么要提出具有映射开销的三层架构?
  • @Kenneth 感谢您的反对。就要求而言,他通过提到报告并使用复杂的表连接获取数据来明确表示(如果我错了,请纠正我)。因此,根据这些要求,我建议使用 EF 并列出了相同的简短说明。
  • 我只是没有看到任何正当理由采用 3 层方法。不涉及任何业务规则,如果他只想查询和公开数据,您会使用映射器和图层以及您不需要的所有东西使一切复杂化。
  • 你为什么不让他决定这是否让他复杂化?很公平 ?并通过提及映射器和所有东西来使事情复杂化,您在回答中也列出了一个映射器 - Dapper!
  • 对于一些简单的查询来说,这比 3 层和完整的 ORM 要轻得多。
最近更新 更多