Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Sql server 在实体框架中,代码优先的方法需要在引用表之间执行删除操作_Sql Server_Entity Framework - Fatal编程技术网

Sql server 在实体框架中,代码优先的方法需要在引用表之间执行删除操作

Sql server 在实体框架中,代码优先的方法需要在引用表之间执行删除操作,sql-server,entity-framework,Sql Server,Entity Framework,我有以下两个表(表2中的entityid是表1的外键): 表1{entityid,用户名} 表2{id,entityid,firstname,lastname….} 当我使用EF 6对表2执行删除操作时,如果表2中没有进一步的引用,我希望表1中的条目也被删除 通过使用此代码: modelBuilder.Entity<SigODEntity>() .HasOptional(a => a.SigODs) .WithOptional

我有以下两个表(表2中的
entityid
是表1的外键):

  • 表1{entityid,用户名}
  • 表2{id,entityid,firstname,lastname….}
当我使用EF 6对表2执行删除操作时,如果表2中没有进一步的引用,我希望表1中的条目也被删除

通过使用此代码:

modelBuilder.Entity<SigODEntity>()
            .HasOptional(a => a.SigODs)
            .WithOptionalDependent()
            .WillCascadeOnDelete(true);
modelBuilder.Entity()
.has可选(a=>a.SigODs)
.WithOptionalDependent()
.WillCascadeOnDelete(真);
我能够对表1执行删除操作,这将删除表2中的子条目


但我希望这种情况也能以相反的方式发生。在实体框架中有没有直接的方法可以做到这一点?

没有直接的方法可以根据需要执行删除。因为你总是提到表1中的关系→ 表2

您必须使用一个循环(foreach),该循环将表2中的所有入口状态提到为已删除(可能带有条件),同时您必须检查表2中入口的状态(可选,取决于您的场景,如果您使用任何条件删除表2,则会有一些数据未删除)。如果表2中所有条目的状态均为“已删除”,则将表1数据的条目状态也更改为“已删除”,并保存


db.SaveChanges()

否。这将使删除单个子记录成为一项昂贵的操作。EF必须检查相同类型的其他实体中是否存在FK值。而且,这会增加出错的机会,因为家长可能有其他的参考资料。谢谢!!!现在要删除父项,我要检查如果没有子元素,那么只删除父项。