好的,看看下面的简单对象模型:
- 实体
ConcreteThingy
派生自AbstractThingy
。 - 实体
Owner
最多可以有 1 个ConcreteThingy
。- 没有两个
Owners
可以有相同的ConcreteThingy
。
- 没有两个
EDMX:
数据库模型(TPT):
我想要的是:
我想要两件事,按优先级降序排列:
- 我想要的东西#1:最重要的是,我想要下面#2 的最简单、最简洁、更干净的解决方案。
- 我想要的东西#2:当我删除一个
Owner
时,我想自动删除任何可能关联的ConcreteThingy
,以及基础AbstractThingy
。
我在做什么:
所以,很自然地,我去 EDMX 并简单地在Owner 0 ↔ 0..1 ConcreteThingy关联上打开Cascade delete 。
FK_ConcreteThingy_Owner
这在将关系的 Delete 规则设置为Cascade时效果很好,但我没有看到任何确保AbstractThingy
记录也被删除的约束/数据库代码。
同样,当我删除 an 时Owner
,相应的ConcreteThingy
(如果有的话)被删除,但它留下了 dangling AbstractThingy
,这并不奇怪,我不想要。
有人可以告诉我使用 EF 5 实现此类任务的标准方法是什么?
我尝试过AbstractThingy
抽象化,希望 SQL 代码能以某种方式推断出我想要的东西(可以理解,生成器会有某种先有鸡还是先有蛋的难题,但是嘿,至少我试过了。)
或者我应该在我的 EDMX 中定义某种智能引用约束?
还是希望我自己去数据库编写代码,比如触发器等......!?!?对于 EF 及其设计工具来说,这将是一场 [另一个] 惨败。
谢谢。