首先,我并没有试图激发关于LINQ与存储过程的另一场辩论。
假设这个问题(对或错)我将使用SQL服务器存储过程并将通过LINQ访问这些存储过程。我正在使用存储过程(同样,对或错),因为我想在存储过程级别和基础表和视图上强制执行安全性。我正在使用LINQ(再一次,对或错)因为我想学习它。
鉴于上述情况,我的LINQ查询应该是相对简单的SELECT语句(显然只是指在这个问题中读取数据),而不是包含分组或计算的LINQ查询,或者通常是其他更复杂的事情。这个假设是基于我将这个逻辑放在T-SQL中的计划。换句话说,我的LINQ查询将相对“愚蠢”。此外,鉴于我希望在存储过程级别强制执行安全性并且不允许访问基表,我认为这种方法与该目标一致。
我的逻辑在#1中是否有任何缺陷?
如果我直接对基表使用LINQ,我显然必须直接在这些基表上强制执行安全性。这似乎很明显,但我想证实。
我的逻辑在#2中的任何流程?
答案 0 :(得分:0)
LINQ本身是非常通用的,因为有linq-to-objects,linq-to-xml,linq-to-sql,linq-to-EF等。我猜你可能会追问Linq- to-Sql功能(与Linq-to-EF相反)。通过这样做,你的所有集合都是由存储过程提供的,并使用Linq在应用程序中查询这些集合。我会说你会教会自己一种非常偏向于利用Linq的强大功能,尤其是Linq-to-Sql。您将错过了解Linq-to-Sql如何生成发送到服务器的SQL查询的大量技术诀窍,因为您将只能执行非常基本的“哑”查询。例如。你甚至无法加入Linq-to-Sql。您将错过正确理解Linq-to-Sql的ORM功能,DataContexts中的缓存以及允许您从集合中插入/更新/删除项目的ActiveRecord行为的机会。
虽然我并不主张不做你正在做的事情(这是一种非常有效的方法来利用存储过程和linq),但我认为这是学习Linq的一种不好的方法。尝试用直接方法弄湿你的脚,在Visual Studio中使用.dbml文件方法进行数据建模,这种方法在2008年由Linq福音传播者提倡。虽然我认为这种方法对于部署大型,可行的项目是有缺陷的,但它是虽然非常善于自学Linq和Linq-to-Sql。一旦了解了工作原理,您将能够理解如何正确利用存储过程来分离访问控制(一种始终受到SQL Server布道者称赞的方法)以及如何处理.dbml无法解决的问题。建模方法(特别是数据库模式升级的问题)。
有些人可能会说你也应该留意实体框架提供的内容,但是如果你处于学习阶段,我会全心全意地推荐Linq-to-Sql。它不那么复杂,工作正常,在VS工具集中得到很好的支持,而且你不必学习Entity-SQL ...