C# 实体框架/数据库-存档外键记录

C# 实体框架/数据库-存档外键记录,c#,asp.net,database,entity-framework,database-design,C#,Asp.net,Database,Entity Framework,Database Design,我为客户开发了一个应用程序,客户关系如下: SalesOrder与客户之间存在外键关系(一对一) 客户现在希望能够删除客户,这样他们就不能用于任何未来(新)销售订单,但很明显,我希望保留历史记录以进行报告等。同样,在极少数情况下,该记录可能需要在未来进行更新,因此在“编辑”模式下,客户需要在那里(但所有其他已删除的客户不会) 我正在寻找一种模式的输入来对此进行建模,或者寻找更好的建议。我的想法是对客户进行“归档”,但我的问题是,如果有人加载旧的销售订单,我还需要加载客户填充的DropDownLi

我为客户开发了一个应用程序,客户关系如下:

SalesOrder与客户之间存在外键关系(一对一)

客户现在希望能够删除客户,这样他们就不能用于任何未来(新)销售订单,但很明显,我希望保留历史记录以进行报告等。同样,在极少数情况下,该记录可能需要在未来进行更新,因此在“编辑”模式下,客户需要在那里(但所有其他已删除的客户不会)

我正在寻找一种模式的输入来对此进行建模,或者寻找更好的建议。我的想法是对客户进行“归档”,但我的问题是,如果有人加载旧的销售订单,我还需要加载客户填充的DropDownList的归档记录

因为我使用的是Entity Framework和EntityDataSource,所以我猜在DropDownList的SelectedValue绑定上可能也会出现运行时异常,但我还没有对此进行验证

关于从哪里开始有什么想法或建议吗


谢谢。

我相信我有一个解决方案。我整天都在绞尽脑汁想这个问题,但我认为它相当简单。在一个快速原型中,它似乎能满足我的需要:

我在Customers表中添加了一个“存档”位(实际上是在他们从中继承的BusinessEntity表中)。然后在“编辑销售订单”页面中,在查询客户时,我有一个where子句,其中包含按ID列出的客户

例如(伪代码): 选择CustomerID,从存档为0或CustomerID=52的客户中选择名称

这会为我需要的记录提取所有活动客户和一个客户。这允许客户仍然链接到该记录进行编辑,并且不会使用DropDownList绑定生成运行时异常

对于报告,我假设我不会基于存档位进行过滤,因为它无论如何都是只读的