【发布时间】:2011-03-06 14:50:56
【问题描述】:
我想到了一个应用程序,它表明数据库表只能追加;也就是说,我只能将数据插入数据库,而不能更新或删除它。我想使用 LINQ to SQL 来构建它。
由于表是仅附加的,但我仍然需要能够“删除”数据,我的想法是每个表 Foo 都需要有一个对应的 FooDeletion 表。 FooDeletion 表包含一个外键,它引用了已删除的 Foo。例如,下表描述了“Foos 1、2 和 3 存在,但 Foo 2 和 Foo 3 已被删除”的状态。
Foo FooDeletion
id id fooid
---- -------------
1 1 2
2 2 3
3
虽然我可以在数据访问层之上构建一个抽象,以 (a) 防止直接访问 LINQ to SQL 实体并 (b) 以这种方式管理删除,但我的目标之一是保持我的数据访问层为尽可能薄,所以我宁愿让 DataContext 或实体类在幕后工作。所以,我想让调用者像往常一样使用Table<Foo>.DeleteOnSubmit(),并且 DAL 知道向FooDeletion 添加一行,而不是从Foo 中删除一行。
我已经阅读了"Implementing Business Logic" 和"Customizing the Insert, Update, and Delete Behavior of Entity Classes",但我找不到实现我想要的具体方法。我以为我可以使用部分方法DataContext.DeleteFoo()来代替调用ExecuteDynamicInsert(FooDeletion),但是根据this article,“如果调用了不适用的方法(例如,要更新对象的ExecuteDynamicDelete),结果是未定义”。
这是傻事吗?我是否让自己变得比我需要的更难?
【问题讨论】:
标签: sql linq linq-to-sql database-design