.NET 中的对象关系映射器和存储过程的使用

Posted

技术标签:

【中文标题】.NET 中的对象关系映射器和存储过程的使用【英文标题】:Object Relational Mappers in .NET and stored procedure usage 【发布时间】:2009-03-24 11:25:14 【问题描述】:

鉴于它们在大多数情况下为您生成了 CreateReadUpdateDelete (CRUD) 功能,这是否意味着存储过程不会经常使用?如果这些方法使用LINQ,那么这意味着没有使用存储过程,对吗?

非常感谢任何澄清。

【问题讨论】:

【参考方案1】:

大多数 ORM(包括 LINQ-to-SQL 和 EF)都会为您提供自动化 CRUD 或存储过程的选择。

例如,虽然我很乐意让 ORM 处理简单的同质 CRUD 问题(插入简单记录等),但如果我有一个关键的搜索方法以非平凡的方式跨越复杂数据,我可能会选择使用 UDF(或 SP)来确保我可以正确地对其进行分析、调整等。

在某些情况下,存在阻止直接 CRUD 的安全/审计问题,但在大多数涉及应用服务器的情况下,这是人为的担忧:如果黑客已经破坏了您的应用服务器,那么您已经遇到了重大问题 -如果他们知道架构,他们通常可以使用 SP 造成同样多的伤害。

如果您在不同技术的多个应用程序中使用相同的后端,那么 SP 也很有用。

许多最初围绕 SP 与文本命令的性能辩论现在基本上没有实际意义;正确参数化的文本查询可以使用查询缓存,并且是注入安全的,等等。

【讨论】:

以上是关于.NET 中的对象关系映射器和存储过程的使用的主要内容,如果未能解决你的问题,请参考以下文章

C# .NET 中的数据映射器问题

是否有任何 OR 映射器提供异步方法?

需要的建议:O/R 映射器 [重复]

[译]Dapper教程

Nhibernate一对多关系复合键问题

简单映射器模式 C# 代码生成模板