鉴于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"});
提前感谢您的帮助。
答案 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中删除。