2012-08-17 115 views
0

比方说,我有以下类是:的LINQ to SQL deleteAllOnSubmit参照完整性

Module 
    { 
     long MID // PK 
     string Name 
    } 

    ModuleBlock 
    { 
     long MID  // FK 
     long BID  // FK 
    } 

    Block 
    { 
     long BID  // PK 
     string Info 
    } 

    BlockLanguage 
    { 
     long BID  // FK 
     long LID  // FK 
    } 

    Language 
    { 
     long LID  // FK 
     string Language 
    } 

想象这些都充满了数据。现在,我想删除一组块。我该如何做?我必须删除适当的ModuleBlocks和BlockLanguages。

让我们说这是我想删除块列表:

var blocks = // blocks query here 

我可能要打电话:

Context.Blocks.DeleteAllOnSubmit(blocks); 

但我要打电话,以确保还有什么该数据在ModuleBlock & BlockLanguage中也被删除?

回答

2

您可能可以使用关联的对象来执行此操作。

Context.ModuleBlocks.DeleteAllOnSubmit(blocks.ModuleBlocks); 
Context.BlockLanguages.DeleteAllOnSubmit(blocks.BlockLanguages); 
Context.Blocks.DeleteAllOnSubmit(blocks); 
1

是的,你需要手动删除子对象。但有一个技巧:在SQL Server中将外键设置为CASCADE。它会自动删除关联的对象。这是最快和最简单的解决方案。