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

时间:2013-06-17 20:57:14

标签: c# asp.net database entity-framework database-design

我为具有以下关系的客户开发了一个应用程序:

SalesOrder与客户的外键关系(一对一)。

客户现在希望能够删除客户,以便它们不会用于任何未来(新)SalesOrders,但显然我想保留报告的历史记录等。同样,记录可能需要在极少数情况下可以在以后更新,所以在“编辑”模式下,客户需要在那里(但所有其他已删除的客户都不会)

我正在寻找关于模式的输入来建模这个或更好的建议。我的想法是在客户上有一个“存档”位,但我的问题是,如果有人加载旧的SalesOrder,我还需要加载客户填充的DropDownList的存档记录。

由于我正在使用Entity Framework和EntityDataSource,我的猜测是我也可能在DropDownList的SelectedValue绑定上获得运行时异常,但我还没有验证这一点。

关于从哪里开始的任何想法或建议?

谢谢。

1 个答案:

答案 0 :(得分:3)

我相信我有一个解决方案。我一整天都在绞尽脑汁,但我觉得这很容易。在快速原型中,它似乎做了我需要它:

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

例如(伪代码): SELECT CustomerID,Name FROM Customers WHERE Archived = 0 OR CustomerID = 52

将所有活跃客户和一位客户拉到我需要的记录中。这允许客户仍然链接到记录以进行编辑,并且不会使用DropDownList绑定生成运行时异常。

对于报告,我假设我不会根据Archived位进行过滤,因为无论如何它都是只读的。