Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对*派生实体的级联删除*_C#_.net_Sql Server_Entity Framework_Foreign Keys - Fatal编程技术网

C# 对*派生实体的级联删除*

C# 对*派生实体的级联删除*,c#,.net,sql-server,entity-framework,foreign-keys,C#,.net,Sql Server,Entity Framework,Foreign Keys,好的,检查以下简单对象模型: 实体ConcreteThingy源自AbstractThingy 实体所有者最多可以有1个具体内容。 任何两个所有者都不能拥有相同的具体内容 EDMX: DB型号(TPT): 我想要的是: 我想要两件事,按优先级降序排列: 我想要的东西#1:最重要的是,我想要最简单、最简洁、更干净的#2解决方案 下面 我想要的东西#2:当我删除一个所有者时,我想自动删除任何潜在关联的具体内容,以及基础抽象内容 我在做什么: 因此,很自然地,我去了EDMX,在所有者0

好的,检查以下简单对象模型:

  • 实体
    ConcreteThingy
    源自
    AbstractThingy
  • 实体
    所有者
    最多可以有1个
    具体内容
    • 任何两个
      所有者
      都不能拥有相同的
      具体内容
EDMX:

DB型号(TPT):

我想要的是: 我想要两件事,按优先级降序排列:

  • 我想要的东西#1:最重要的是,我想要最简单、最简洁、更干净的#2解决方案 下面
  • 我想要的东西#2:当我删除一个
    所有者时,我想自动删除任何潜在关联的
    具体内容
    以及基础
    抽象内容
我在做什么: 因此,很自然地,我去了EDMX,在所有者0上打开了级联删除↔ 0..1具体事物关联

这在将
FK\u ConcreteThingy\u Owner
关系的删除规则设置为Cascade时效果很好,但是我没有看到任何约束/DB代码可以确保
AbstractThingy
记录也被删除

同样,当我删除一个
所有者
时,相应的
ConcreteThingy
(如果有的话)会被删除,但它会留下悬空的
AbstractThingy
,这并不奇怪,我不想要它

有人能告诉我使用EF 5执行此类任务的标准方法是什么吗?

我尝试过将
AbstractThingy
abstract,希望SQL代码能够以某种方式推断出我想要的东西(可以理解,对于生成器来说,会有一些鸡和蛋的难题,但嘿,至少我试过了。)

或者我应该在我的EDMX中定义某种智能参考约束吗

还是我会去数据库自己写代码,比如触发器等等。。。!?!?对于EF及其设计工具来说,这将是一场[另一场]惨败


谢谢。

你能把抽象类和具体类颠倒过来吗?是否将抽象交给所有者,将具体交给抽象?然后,一系列级联删除将起作用。这也可能有助于在这个设计中将1:1的“抽象”结构规范化为“具体”结构。我知道你的意思,但这里有一个棘手的问题:设计是故意这样做的。这就是原因:这里有同样的问题:那是EF4.x。我想EF 5并没有改变这种情况。@user15741:把它写下来作为对那个问题的回答或评论。我没有问这个问题,问题负责人也没有注意到你在这里的评论。对不起,看到评论回复,以为是你。