1

好的,看看下面的简单对象模型:

  • 实体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 及其设计工具来说,这将是一场 [另一个] 惨败。

谢谢。

4

0 回答 0