【发布时间】:2013-11-25 16:53:33
【问题描述】:
当我开发 ASP.NET 网站时,我真的很喜欢将实体框架与数据库优先或代码优先模型(+ asp.net mvc 控制器脚手架)一起使用。
对于需要访问现有数据库的应用程序,我自然想到创建一个数据库模型并使用 asp.net mvc 脚手架在几分钟内完成所有基本的 CRUD 操作,几乎没有开发成本。
但我与一位朋友讨论过,他告诉我仅通过存储过程访问存储在数据库中的数据是最好的方法。
因此,我的问题是,您如何看待这句话?为数据库中的表上的任何所需操作创建存储过程是否更好(例如,在此表上创建和读取,仅在另一个表上更新和删除,...)?这样做而不是使用从数据库中的表创建的数据库优先模型有哪些优点/缺点?
我起初的想法是,通过存储过程完成所有事情会使开发成本翻倍,因为您必须编写这些存储过程,而 Entity Framework 只需单击几下就可以提供DbContext,从而允许我使用 LINQ over Entities , ... 但是后来我阅读了一些关于所有权链的内容,这些内容可能会通过仅设置执行存储过程的权限而不设置对表的任何操作(选择、插入、更新、删除)的权限来提高安全性。
感谢您的回答。
【问题讨论】:
-
除了提到的优点之外,我不禁想起了一个缺点: - 将大字符串作为 varchars(参数)传递是非常不合适的,你必须将它们分成多个部分等。所以如果你想通过加入ids 作为 varchar 例如 ("4,523,5,78,...") 它的长度非常有限 (nvarchar(max))...更容易在您的业务逻辑中创建一个 sql 语句。
-
@sjkm:
nvarchar(max)可以容纳十亿个字符 - 在我看来并不完全非常有限 .... -
是的,甚至 10.37 亿,但我说的是巨大的字符串。一旦在报告系统中出现这种情况,我必须处理它。
标签: c# sql-server entity-framework stored-procedures linq-to-sql