使用 ServiceStack OrmLite 删除条件为其他 table 的行
Using ServiceStack OrmLite to delete rows with condition in other table
我在数据库中有以下表格:
Table C Table B Table A
------- ------- -------
Id Id Id
BId AId
BId 列是 TableB 的外键。 AId 是 TableA 的外键。我想删除 Table C 中与 TableA 中的某行相连的所有行。以下 SQL(在 SQL Management Studio 中使用)可以解决问题:
DELETE [ns].[TableC]
FROM [ns].[TableC] c
JOIN [ns].[TableB] b ON c.[BId] = b.[Id]
WHERE b.[AId] = 530
GO
我尝试使用以下代码:
var query = connection.From<TableC>()
.Join<TableC, TableB>((c, b) => c.BId == b.Id)
.Where<TableB>(b => b.AId == 530);
connection.Delete<TableC>(query);
但这会导致异常,通过调用 GetLastSql() 我得到:
DELETE FROM "ns"."TableC" WHERE ("ns"."TableB"."AId" = @0)
如何使用 ServiceStack OrmLite 完成此删除操作?
对 DELETE TABLE JOINS 的支持最近才添加到 OrmLite 中,并且可以从现在 available on MyGet.
的 v4.5.1 开始使用
我在数据库中有以下表格:
Table C Table B Table A
------- ------- -------
Id Id Id
BId AId
BId 列是 TableB 的外键。 AId 是 TableA 的外键。我想删除 Table C 中与 TableA 中的某行相连的所有行。以下 SQL(在 SQL Management Studio 中使用)可以解决问题:
DELETE [ns].[TableC]
FROM [ns].[TableC] c
JOIN [ns].[TableB] b ON c.[BId] = b.[Id]
WHERE b.[AId] = 530
GO
我尝试使用以下代码:
var query = connection.From<TableC>()
.Join<TableC, TableB>((c, b) => c.BId == b.Id)
.Where<TableB>(b => b.AId == 530);
connection.Delete<TableC>(query);
但这会导致异常,通过调用 GetLastSql() 我得到:
DELETE FROM "ns"."TableC" WHERE ("ns"."TableB"."AId" = @0)
如何使用 ServiceStack OrmLite 完成此删除操作?
对 DELETE TABLE JOINS 的支持最近才添加到 OrmLite 中,并且可以从现在 available on MyGet.
的 v4.5.1 开始使用