代码之家  ›  专栏  ›  技术社区  ›  Psytronic

覆盖ef的默认插入/更新/删除查询是否有好处?

  •  0
  • Psytronic  · 技术社区  · 14 年前

    正如问题所要求的那样。

    ef modeler工具允许我们将insert/update/delete函数映射到存储过程,覆盖它们有什么好处吗?

    如果它需要一些自定义验证,那么显然是的,但是如果我对现在的情况满意,那么是否值得为所有人创建存储过程呢?

    我不记得如何查看它为他们执行的SQL来找出准确的查询,但我应该想象它与标准的插入/更新/删除查询非常相似。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Erik van Brakel scottrakes    14 年前

    我可以想到一些有用的例子:

    • 您使用的是一个传统数据库,它不能精确映射到您的EF模型。
    • 您需要在插入/更新/删除时执行额外的查询,但您没有在数据库上触发的权限。
    • 要从数据库中提取的软删除。所以常规删除实际上会执行软删除。

    不太确定这些选择有多可行,因为我个人更像一个不健康的人。这些都是理论上的选择。

    至于查看已执行的查询,有几种可能做到这一点。可以将探查器附加到SQL Server实例,并查看执行的原始查询。还有实体框架分析器(由Ayende/OrenEini提供),这不是免费的,但它确实使读取和调试查询变得容易得多。

        2
  •  1
  •   Justin Niessner    14 年前

    对。凌驾于它们之上是有好处的。

    并非所有人都在更新或删除时更新或删除一行数据。

    在某些情况下,删除记录实际上只意味着将effictiveuntil日期设置为现有记录,并出于历史目的将记录保存在数据库中。

    更新也可以这样。当前行不更新现有行,而是获取effectiveUntil日期集,并使用具有空effectiveUntil日期(或类似机制)的新数据插入一个全新的行。

    通过向实体框架提供插入/更新/删除逻辑,您可以准确地指定这些操作在数据库方面的含义,而不是在RDBMS范围内的含义。

    至于第二个问题(显然我最初忽略了这个问题),如果您对当前正在生成的内容感到满意,那么不,不值得创建它们。您只需添加额外的麻烦,即每当更改表结构时,必须记住更新存储过程。