好的,看看下面的简单对象模型:
- 实体
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 及其设计工具来说,这将是一场 [另一个] 惨败。
谢谢。