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

如何基于非“删除”删除方法在数据集中自动生成自定义命令?

  •  2
  • Totty  · 技术社区  · 17 年前

    我正在使用数据集访问C项目中的SQL Server 200x。我们通常的做法是,在几乎所有的表中,不删除记录。相反,我们有一个字段,该字段只保存一点记录是否被删除。我可以手动编辑数据集中的每个表,并使它们的select命令包含where deleted=0,而delete命令则是一个更新。然而,这很乏味。

    有没有办法改变vs用来生成tableadapter命令的方法来自动为它们添加这个功能?

    编辑: 实际上,这是自定义GeneratedBdirectMethods功能的某种方式。

    3 回复  |  直到 17 年前
        1
  •  1
  •   Peter    17 年前

    我认为您将无法使用类似于sqlcommandbuilder的东西自动生成这个。

    相反,您可能要做的是利用这样一个事实:数据集自动生成代码中的强类型数据集和数据适配器使用分部类,因此您应该能够向分部类添加一些额外的逻辑,这些逻辑将覆盖默认实现。

    例如,您应该能够在生成的数据表适配器上重写initcommandcollection方法,然后可以在update isdeleted=1中替换该方法,而不是使用delete命令。

    你必须为此写些聪明的文章,但它会帮助你。我建议让表适配器检查一个列表,看看表名是否在列表中,如果在列表中,那么您就知道您正在处理一个已删除的列,如果没有,那么它就是一个可删除的表记录。

        2
  •  2
  •   Community Mohan Dere    11 年前

    您可以通过数据库视图访问数据,并在那里进行过滤。

    我个人不喜欢数据集定义中的SQL命令。

    编辑:

    这是没有内置的可能性做的阿法克。您可以在解决方案资源管理器(右键单击.xsd)的上下文菜单上创建一个vs加载项并调用它,或者打开ds并从主菜单调用加载项。然后,该外接程序将解析XSD并标识select和update文本并进行更正。可能只有在生成DS(从SQL Server中拖放)之后,这才有用。

    有关外接程序,请查看:

    我个人会选择DB方式。生成为您进行筛选的视图,并对那些将执行更新而不是删除的视图添加删除触发器。这样,您就消除了在应用程序上这样做的负担,并使这成为创建物理DB模型的人的责任。每桌一次。相反,在处理单个表(使用同一个DB表的多个数据集)的代码中可能有多个点。

        3
  •  1
  •   Ian Ringrose    17 年前

    我会考虑使用一个像 CodeSmith 创建自定义模板来创建数据集,而不是使用“拖放”设计器。创建一个模板首先需要更长的时间,但它提供了对所创建内容的控制和可重复性。

    否则,请看一个更好的ORM系统,并定制它的映射以满足您的需要。