使用FluentMigrator根据where子句删除多行

时间:2014-06-17 17:58:34

标签: c# delete-row fluent-migrator

鉴于Payment表,PaymentStatus表和PaymentHistory表,我需要从PaymentStatus表中删除Payment和PaymentHistory表具有相关记录的状态。所以很自然地意味着删除支付表之前的历史表。当然,历史数据具有多种不同状态的支付记录。我需要的是历史表删除的where子句... sql看起来像这样:

DELETE FROM PaymentHistory 
WHERE PaymentId IN 
(SELECT Id FROM Payment WHERE PaymentStatusCode = 'Processing')

我不明白如何在FluentMigrator中实现这一目标。这是我到目前为止,但在.FromTable()之后没有.Where()或其他可用的扩展方法

Delete.FromTable("PaymentHistory").Row(new {PaymentStatusCode = "Processing"});

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:7)

现在我觉得愚蠢......

const string cascadeDeleteScript = 
@"DELETE FROM PaymentHistory WHERE PaymentId IN 
              (SELECT Id FROM Payment WHERE PaymentStatusCode = 'Processing') ";
Execute.Sql(cascadeDeleteScript);

答案 1 :(得分:0)

如何将表格设置为Cascade Delete?

How to add 'ON DELETE CASCADE' in ALTER TABLE statement

您似乎必须删除Primary-Foreign Key约束并在考虑Cascade的情况下重新创建它,但是当您从Payment中删除时,您也将从PaymentHistory中删除。