2011-02-27 43 views
2

我有两个带有外键约束的表我怎样才能从一个事务中的两个表中删除行? LINQ to SQL似乎以错误的顺序调用我的删除。有没有我可以检查的地方,并确保约束被linq to SQL正确识别?使用linq to sql从多个表中删除时的外键约束问题

DataContext.OtherImages.DeleteOnSubmit(myOtherImage); 
DataContext.Images.DeleteOnSubmit(myImage); 
DataContext.SubmitChanges(); 

外键约束在OtherImages上。谢谢!

+0

”SQL似乎以错误的顺序调用我的删除。 “ - 你确定吗? http://stackoverflow.com/questions/2509842/linq-to-sql-delete-some-related-records –

+0

正确的,它应该,但为什么外键约束错误?如果它按照我所做的顺序做了,那么应该没有问题,对吧? – Mike

+0

它可能不是你的问题的答案,但你可以创建外键,这样当'Images'表中的行被删除时,它会自动删除'OtherImages'表中的那些用于引用键的对象。从这里查看'ON DELETE CASCADE' http://msdn.microsoft.com/en-us/library/aa933119(SQL.80).aspx –

回答

3

你应该在你的Image类像

[Association(
    Name="FK_OtherImages_Images", 
    Storage="_OtherImages", 
    OtherKey="ImageId", 
    DeleteRule="NO ACTION")] 
public EntitySet<OtherImage> OtherImages{ 
    ... 
} 

DataContext.OtherImages.DeleteOnSubmit(myOtherImage); 
DataContext.Images.DeleteOnSubmit(myImage); 
DataContext.SubmitChanges(); 

应该可以正常工作。我的猜测是你忘记了另一个外键。您可以看到正在执行什么查询

DataContext.Log = Console.Out; 

或其他等同物。我不建议级联删除只是为了使这项工作,因为它应该没有这样做的工作。

+0

这是我忘记调整大小表的另一个关键。谢谢。 – Mike

0

简单的逻辑

设置的外键关系

去选择::表设计

  1. enfore表示复制:NO
  2. enfore表示外键约束:NO