2016-10-19 6 views
2

У меня есть следующие таблицы в базе данных:Использование ServiceStack OrmLite для удаления строк с условием в другой таблице

Table C Table B Table A 
------- ------- ------- 
Id   Id   Id 
BId  AId 

Колонка BID является внешним ключом к TableB. AId является внешним ключом для TableA. Я хочу удалить все строки из таблицы C, которые подключены к строке в таблице. Следующий 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 для выполнения этого удаления?

ответ

2

Поддержка DELETE TABLE JOINS была недавно добавлена ​​в OrmLite и доступна в версии v4.5.1, которая теперь находится available on MyGet.

+0

спасибо. Эти NuGets решили проблему. –

+0

Один вопрос, однако, это версии NuGets on MyGet или они являются бета-версиями? –

+0

@MartinA Это лишь промежуточные предварительные пакеты, которые мы развертываем между нашими официальными релизами, которые публикуются на NuGet. – mythz