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

C#组合框-“删除的实体”?

  •  0
  • dognose  · 技术社区  · 7 年前

    任何提供 select 由特定数据源填充的字段:首先,一切正常,但一旦应用程序老化,一些旧条目可能会被删除,从而导致以前的问题 选择 字段无法再访问相关实体。

    打开一个视图,其中一个select指向一个已经删除的数据行(最佳情况)将显示 empty string .

    我们设计系统的方式是,删除不是真正的删除操作,而只是设置删除标志。(所以,所有的信息仍然存在)

    然而,当将数据绑定与C#(或者即使不是)一起使用时,最明显的用例仍然没有被通用机制覆盖(我假设):

    • “选择”字段应显示所有未删除的实体,同时创建包含对相关实体的引用的新对象。
    • 如果在“天/月/年”之前选择了“已删除”实体,则“选择”字段(以相同的方式填充)应显示“已删除”实体。

    有“方便”的解决方案吗?

    目前,我们对每个数据源都使用“代理方法”,如果被删除实体的数据不在“可用数据”集合中,它将重新加载该实体的数据——但很难相信没有更好的方法来处理这个问题,因为这个问题几乎适用于所有语言?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Boris Schegolev    7 年前

    在规范化数据库中,您将有一个约束 ON DELETE NO ACTION/RESTRICT 阻止从列表中删除引用元素的事件。这将迫使您决定如何处理引用行。

    使用手动控制的删除,这可能会被触发器覆盖。由于这些都没有实现,所以只剩下一件事要做:在呈现UI之前,使用所选选项更新下拉列表。我的方法 Java ,我不擅长 C# ):

    List<String> options = getNonDeletedWhatever();
    if (!options.contains(currentEntity.getWhatever())) {
        options.add(currentEntity.getWhatever());  // This optionally inserts an outdated value
    }
    

    或者简单地说:

    Set<String> options = getNonDeletedWhatever();
    options.add(currentEntity.getWhatever());      // This optionally inserts an outdated value
    
        2
  •  1
  •   Michal B.    7 年前

    我通过创建一个可用(未删除)项目的列表来解决这个问题,如果所选项目是已删除的,那么我会将该项目添加到列表中。

    此列表将成为我下拉列表的数据源。