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

Linq到SQL如何防止使用Delete方法?

  •  4
  • PeterFromCologne  · 技术社区  · 18 年前

    如何防止对DMBL中数据访问层=中的某些类型使用Delete()?

    Insert和Update的“默认方法”映射到相应的存储过程。但对于删除它说 “使用运行时”

    有没有办法在DB模型层上实现这一点?

    非常感谢

    4 回复  |  直到 18 年前
        1
  •  7
  •   tvanfosson    18 年前

    为每个这样的实体实现一个分部类,并实现OnValidate partial方法。它将ChangeAction作为参数。当ChangeAction为ChangeAction.Delete时,抛出一个异常,指示该操作不允许(可能是非法操作exception)。

        2
  •  1
  •   Perpetualcoder    18 年前

    在开发应用程序时,我遇到了同样的限制。您始终可以将delete操作设置为使用某个存储过程,而不是框架为同一存储过程生成sql命令。在我的例子中,当我说delete时,我们只是想将某一行标记为deleted,而不是实际删除它。因此,我们的更新存储过程在delete命令中被重用,以简单地将isDeleted col值标记为true。此外,您可能希望围绕DBML构建的类构建某种包装器,并抑制delete方法。现在我没有看到任何特殊的设置使框架只生成create和update方法。分部类可能是另一种选择。

        3
  •  1
  •   wasker    18 年前

        4
  •  0
  •   Bryan Watts    18 年前

    没有生成删除API,这意味着生成的表上的选项不能删除将项目标记为已删除的功能。 DeleteOnSubmit Table<TEntity>

    如果删除实体总是错误的, OnValidate InvalidOperationException 正如tvanfosson所建议的那样。

    我尝试将Linq到Sql的删除映射到存储过程,只需将字段设置为true。它变得很奇怪,因为 DataContext 数据上下文 提交后。

    推荐文章