我看了一的"初学者指南皇宫"后在这里计算器(初学者指南皇宫),但有一个后续行动的问题:

我们关于增加一个新的项目在那里的几乎所有我们的数据库运的将是相当简单的数据检索(还有另外一个段的项目,该项目已经写入数据)。我们的大多数其他项目达到了这一点使用的存储程序用于这样的事情。然而,我想利用皇宫-对-SQL如果它使得更有意义。

因此,问题是这个:对于简单的数据检索,其方法是更好,皇宫-对-SQL或存储的过程?任何特定职业或行骗的?

谢谢。

有帮助吗?

解决方案

一些优点的皇宫在sprocs:

  1. 类型的安全:我认为,我们都理解这一点。
  2. 抽象:这尤其是与 皇宫到的实体.这个抽象也允许的框架添加额外的改进,你可以很容易地利用。 PLINQ 是一个例子加入多线程的支持皇宫.代码变化最小的添加这种支持。它将更难做到这一数据访问代码,简单地呼吁sprocs.
  3. 支持调试:我可以用任何。净调试器,调试的查询。与sprocs,你不能轻易地调试SQL和经验,主要是绑到你的供应商数据库(MS SQL服务器提供了一个查询分析,但往往是不足够的).
  4. 供应商不可知论者:皇宫工作有很多数据库和数支持的数据库将只会增加。Sprocs并不总是便携式的数据库之间,要么是因为不同的语法或功能支助(如数据库的支持sprocs在所有)。
  5. 部署:其他人已经提到的,这已,但它是更容易部署一个大于部署一个组sprocs.这也关系与#4.
  6. 容易:你没必要学习T-SQL做到数据存取,也不是你必须学会对数据的访问API(例如ADO.NET)必要调sprocs.这是关系到#3和#4。

一些缺点的皇宫vs sprocs:

  1. 网络业务:sprocs只需要serialize sproc名和论证数据的在线而皇宫发送整个查询。这可能得到真糟糕,如果查询是非常复杂。然而,皇宫的抽象允许Microsoft将改善这个过时间。
  2. 不太灵活:Sprocs可以充分利用一个数据库的功能集.皇宫往往是更一般的,在它的支持。这是常见的,在任何一种语言的抽象(例如C#与汇编).
  3. 重新编译:如果你需要作出改变你的方式做数据的访问,需要重新编译,版本,并重新部署大会。Sprocs可以 有的时候 允许DBA调整的数据访问程序,而不需要重新部署任何东西。

安全和可管理性的东西,人们争论过。

  1. 安全:例如,可以保护您的敏感数据的限制访问表直接,并把Acl sprocs.与皇宫,然而,仍然可以限制直接访问表,而不是把Acl可更新的表格 的风景 要实现类似结束(假设你的数据库支持的可更新的意见)。
  2. 可管理性:使用的风景还给你的优点屏蔽你的申请不断从模式的改变(如表格的规范化).你可以更新的视图,而不需要你的数据访问代码,以改变。

我曾经是一个很大的sproc人,但我开始倾向皇宫作为一个更好的选择。如果有一些领域sprocs显然是更好的,然后我可能会仍写一sproc但访问它使用皇宫.:)

其他提示

我一般是支持者的投入的一切在存储程序,为所有的原因,数据库已有重弹多年。在这种情况下的皇宫,这是事实,不会有性能差异用简单的污物的查询。

但请记住几件事的时候作出这一决定:使用任何奥姆夫妻你紧紧你的数据模型。DBA没有自由作出的更改数据模型,而不强迫你改变你的编码。与存储程序,可以隐藏这些各种各样的变化在一定程度上,由于参数清单和结果定(s)返回程序中代表其合同,并且内脏是可以改变的周围,只要该合同仍然是满足。

而且,如果是皇宫的使用对更复杂的查询,调整该数据库将成为一个更加艰巨的任务。当一个存储程序的运行速度缓慢,DBA可以完全专注于代码中分离,且具有很多的选择,只有这样,合同仍然被满足时,他/她完成。

我见过很多很多情况下,严重的问题应用程序中处理了通过改变模式和代码存储程序没有任何改变部署,编码。

也许hybird的做法将是很好与皇宫?皇宫当然可以,可以用来打电话存储程序。

皇宫Sql。

Sql服务器将高速缓存的查询计划,所以没有表现增益sprocs.

你的皇宫发言,另一方面,将在逻辑上的一部分和测试的应用程序。Sprocs总是有点分离和难以维护和测试。

如果我工作一个新应用程序从头开始,现在我只想使用皇宫,没有sprocs.

对于基本数据的检索,我将去皇宫没有犹豫。

由于迁移到皇宫我已经找到了以下优点:

  1. 调试我DAL所未有的容易。
  2. 编译时间安全架构的变化是无价的。
  3. 部署是比较容易,因为一切都是编入DLL。没有更多的管理部署脚本。
  4. 因为皇宫可以支持查询的任何实现IQueryable接口,你将能够使用相同的语法,以查询XML、目的和任何其他数据源不具有学习一门新的语法

皇宫会膨胀的过程缓存

如果应用程序使用皇宫SQL和查询涉及使用的字符串可高度变化的长度,SQL服务器过程缓存将变得臃肿的一个版本的查询每一个可能的串的长度。例如,考虑以下非常简单的查询,创建对抗的人。AddressTypes表在AdventureWorks2008数据库:

var p = 
    from n in x.AddressTypes 
    where n.Name == "Billing" 
    select n;

var p = 
    from n in x.AddressTypes 
    where n.Name == "Main Office" 
    select n;

如果这两个查询的运行,我们将看到两个项目在SQL服务器过程缓存:一定有限(7),和其他与有限(第11条)。现在想象一下,如果有数以百计或数以千计的不同的输入串,所有与不同的长度。该过程缓存将会成为不必要地充满了各种不同的计划完全相同的查询。

这里: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=363290

我想亲皇宫的论点似乎是来自人没有一个历史与发展数据库(一般).

特别是如果使用的产品,如VS DB亲或团队套房,许多论点在这里不适用,例如:

难以维持的和试验:VS提供全面的语法检查、风格检查、引用并约束检查等。它还提供完整单元的测试能力和重构的工具。

皇宫使真正的单元测试不可能的,因为(在我的脑海里),它失败的酸测试。

调试更容易在皇宫:为什么?VS允许完全的步骤--从管理的码和定期调试的SPs。

汇编成一个单一的DLL而不是部署脚本:再次,与以挽救在那里它可以建立和部署充分数据库或数据安全的增量变化。

没有学习TSQL与皇宫:不,你不,但是你必须学会皇宫-在哪里?

我真的不认为这是一个好处。能够改变的东西在隔离可能听起来很好的理论,但只是因为改变履行合同并不意味着它是返回正确的结果。能够确定什么是正确的结果是你需要的背景,你会得到这方面从调码。

嗯,松散耦合应用程序的最终目标的所有优秀的程序员,因为他们真的做不增加灵活性。能够改变的事情在隔离是太棒了,这是你的单元的测试,确保它仍然是返回的适当结果。

在你之前所有生气,我认为皇宫都有自己的位置,并有一个宏伟的未来。但对于复杂,数据密集型应用的我不认为这是准备采取的地方储存的程序。这是我赞同的一个最有价值球员在技术大会今年(他们将保持无名).

编辑:皇宫SQL存储程序方面的事情是什么我还需要了解更多关于-取决于什么我觉得我可以改变我的上谩骂;)

皇宫是新的和具有其位置。皇宫不是发明了替换存储的过程。

在这里,我将重点放在一些性能的神话&缺点,只是对"皇宫SQL",我当然可能是完全错误;-)

(1)人说皇宫声明可以"高速缓冲存储器"中的SQL服务器,所以它不会失去效能。部分正确。"皇宫SQL"其实是在运行时把皇宫的语法TSQL声明.因此,从性角度来看,很难编码ADO.NET SQL声明没有区别于皇宫.

(2)给予一个例子,一个客户服务UI都有一个"转账"的功能。这一职能本身可能更新10DB表和返回一些信息在一个射击。与皇宫,你必须建立一个设定的声明,并将它们发送一批到SQL服务器。表现的这种翻译的皇宫->TSQL批难以匹配储存的程序。理由吗?因为你可以调整的最小单位的声明中存储的过程通过使用建立在SQL探查和执行计划的工具,可以不做这个在皇宫.

这一点是,当时说的单一数据库表和小组的数据污物,皇宫是尽快SP。但对于复杂得多的逻辑、存储的过程是更多的性能可修改的.

(3)"皇宫SQL"很容易使得新手的介绍性能猪。任何高级TSQL家伙可以告诉你的时候不要使用标(基本上不应使用标在TSQL在大多数情况下)。有皇宫和迷人的"foreach"循环的查询,这是很容易的新手写这些代码:

foreach(Customer c in query)
{
  c.Country = "Wonder Land";
}
ctx.SubmitChanges();

你可以看到这个容易的像样的代码是那么有吸引力。但是引擎盖下,.净运行时只翻译这一更新的一批。如果只有500线,这是500线TSQL批;如果有百万条线,这是一个打击。当然,经验丰富的用户不使用这种方式做这份工作,但要点是,它是那么容易落在这个方式。

最好的代码没有代码,并与存储程序,必须编写至少一些代码在数据库和应用程序中的代码来称呼它,而与皇宫SQL或皇宫的实体,你没有写任何额外的代码之外的其他任何皇宫查询其他的实例,下文对象。

皇宫一定有它的位置在特定应用的数据库和中小型企业。

但是在大型企业,在中央数据库作为一个集共同的数据为许多应用程序,我们需要抽象概念。我们需要集中管理安全和显示访问的历史。我们需要能够做到影响分析:如果我做一个小更改数据模型为一个新的业务需要,什么样的查询需要改变以及哪些应用程序需要重新测试?意见和储存程序得到我。如果皇宫可以做所有这一切,使我们的程序更有成效,我对此表示欢迎--任何人都不会有使用它的经验在这样的环境?

DBA没有自由作出的改变 该数据模型,而不强迫你 改变你的编码。与 存储程序,可以隐藏这些 各种变化在一定程度上,由于 的参数清单和结果定(s) 返回的过程表示 其合同,并且内脏可以 改变了周围,只要这 合同仍然是满足。

我真的不认为这是一个好处。能够改变的东西在隔离可能听起来很好的理论,但只是因为改变履行合同并不意味着它是返回正确的结果。能够确定什么是正确的结果是你需要的背景,你会得到这方面从调码。

恕我直言,RAD=皇宫,RUP=存放处.我曾为一大财富500强公司多年来,在许多级别,包括管理,并且坦率地说,我绝不会雇佣RUP开发人员做RAD的发展。他们是那么孤立,他们非常有限的知识做什么,在其他级别的进程。与一个孤立的环境,它才有意义得到数据库管理员控制的数据通过非常具体的切入点,因为其他人坦率地说不知道最好的方法来完成数据管理。

但是,大型企业的移动 痛苦 缓慢发展的舞台,这是极其昂贵的。有时当你需要快速移动,以节省时间和金钱,并皇宫提供,以及更多的黑桃。

有时候我觉得这数据库管理员有偏见,对皇宫,因为他们觉得它威胁到他们的工作保障。但这是自然界的野兽,女士们,先生们。

我觉得你需要去用处于任何真实的东西。

A)编写所有你的逻辑,在皇宫意味着你的数据库是有用的,因为只有应用程序可以使用它。

B)我不相信的对象的模型是更好的比关系的模型。

C)测试和开发一个存储的过程中SQL是一个地狱快多了,比编辑周期中的任何Visual Studio环境。你只是编辑、F5和打击选择和你的比赛.

D)它更容易管理,并部署储存程序比集会..你只要把服务器上的文件,并按F5...

E)皇宫sql仍写糟糕代码的时候,你不要期望。

老实说,我认为,最终的事情将是为MS增加t-sql,以便它可以做一个参加投impliclitly的方式皇宫。t-sql应该知道如果你想要做的顺序。系列商品.部分,例如。

皇宫不禁止使用储存的程序。我用混合模式皇宫-SQL和 皇宫-storedproc.就个人而言,我很高兴我没有写的存放处....pwet-tu。

此外,还有问题可能2.0rollback。相信我,这件事我几次这样我肯定它已经发生了其他人。

我也同意抽象的最好的。随着事实上,原始目的对象是使数据库相匹配起来很好的OO的概念。然而,如果一切工作的现皇宫之前通过具有偏离一点从面向对象的概念,然后旋'em。概念和现实中并不总是适合在一起。没有激进的狂热分子。

我假设你指的是皇宫Sql

对于任何污物的命令很容易配置的性能存储程序与任何技术。在这种情况下,任何两者之间的差异可以忽略不计。尝试分析,为一个5(简单类型)领域对象超过100 000名选择的查询,以查找是否有是一个真正的差别。

另一方面真正的交易的破将这个问题你是否感到舒适的把你的商务逻辑上数据库或不,这是一个参数对存储程序。

根据大师,我定义皇宫作为摩托车和SP如汽车。如果你想去一个短途旅行并且只有小乘客(在这种情况下2),转正常与皇宫.但如果你想去的旅程,并有很大的频带,我想你应该选择SP。

作为结论,选择之间的摩托车或汽车是取决于你的路线(业务)、长度(时间),和乘客(数据)。

希望它能帮助我可能是错误的。D

所有这些答复倾向皇宫主要是谈论方便发展这或多或少连接到贫穷的质的编码或者懒惰的编码。我喜欢这只。

一些优点,或者皇宫,我在这里阅读,便于检测、调试容易等,但是这些都没有连接到最终的输出或终端用户。这总是会引起麻烦的最终用户业绩。什么点载入许多事情记忆,然后应用过滤器在使用皇宫?

再类型安全,是警告说,"我们很小心,以避免错误类型转换",这再次可怜的质量,我们正在试图改进通过使用皇宫.即使在这种情况下,如果任何在数据库中的变化,例如大串列,然后皇宫需要重新编制并不会被类型安全的没有..我尝试。

虽然,我们找到的是良好的,甜蜜的,有趣的等工作时与皇宫,它已经切缺点使得开发懒人:),它证明了1000倍,这是不好的(可能是最糟糕)在业绩相比,存放处.

别懒惰。我尝试很难的。:)

储存过程vs码 (先前的讨论)

为简单的污物的操作一个单一的数据的接入点,我要说的是去皇宫如果你感到舒适的语法。对于更复杂的逻辑,我认为sprocs更efficiant绩效明智的,如果你正好在T-SQL及其更先进的操作。你也有帮助,优化顾问,SQL服务器,探查、测试你的查询,从短程等。

存储程序使得测试更容易,你可以改变的查询,而无需接触应用程序的代码。还有皇宫,得到一个数据并不意味着其权利的数据。和测试数据的正确性装置运行的应用程序,但与存储的过程很容易测试没有接触应用程序。

成果可以总结为

LinqToSql小型站点和原型。它真的可以节省时间为原型。

Sps:普遍的。我可以为你是我的查询和总检查ActualExecutionPlan/EstimatedExecutionPlan.

Create PROCEDURE userInfoProcedure
    -- Add the parameters for the stored procedure here
    @FirstName varchar,
    @LastName varchar
AS
BEGIN

    SET NOCOUNT ON;

    -- Insert statements for procedure here
    SELECT FirstName  , LastName,Age from UserInfo where FirstName=@FirstName
    and LastName=@FirstName
END
GO

http://www.totaldotnet.com/Article/ShowArticle121_StoreProcBasic.aspx

两个皇宫和SQL有他们的地方。两者都有自己的缺点和优点。

有时,对于复杂的数据检索你可能需要存放处.有时你可能想要其他人使用你储存proc在Sql服务器的管理工作室。

皇宫的实体是伟大的快速增删改的发展。

你确定可以建立一个应用程序,仅使用一个或另一个。或者你可以混合起来。这一切都归结到你的要求。但SQL储存过程将不会去任何时候很快。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top