Лямбда-выражение SubSonic 3 ActiveRecord частично игнорируется при удалении

У меня есть таблицы Users, Widgets и Layouts. Пользователи имеют отношение «многие ко многим» с виджетами через макеты. У каждого макета есть UserID и WidgetID. Я хочу удалить макет, который соответствует определенному идентификатору пользователя и идентификатору виджета.

Используя SubSonic 3 ActiveRecord, я пишу:

Layout.Delete(x => x.UserID == user.id && x.WidgetID == id);

Однако SubSonic удаляет все макеты виджетов для пользователя, по-видимому, игнорируя вторую часть условия. Я делаю это неправильно, или это ошибка SubSonic? Если последнее, есть ли обходные пути?

Добавлено позже: я временно исправил это в Context.tt в подкаталоге Models моего проекта:

diff --git a/Models/Context.tt b/Models/Context.tt
index ee64200..dd47510 100644
--- a/Models/Context.tt
+++ b/Models/Context.tt
@@ -162,8 +162,8 @@ namespace <#=Namespace#>
         LambdaExpression lamda = column;
         SqlQuery result = new Delete<T>(this.Provider);
         result = result.From<T>();
-        SubSonic.Query.Constraint c = lamda.ParseConstraint();
-        result.Constraints.Add(c);
+        var q = new QueryVisitor();
+        result.Constraints.AddRange(q.GetConstraints(lamda));
         return result;
     }

person glebd    schedule 14.07.2009    source источник
comment
Да - укажите это как проблему. Этого не должно происходить ...   -  person    schedule 14.07.2009
comment
У меня такая же проблема с находкой. var items = Person.Find (x = ›x.ID == id && x.Name == myStringArray [0]); myStringArray заполнен!   -  person Jon    schedule 15.07.2009
comment
Подана новая проблема: github.com/subsonic/SubSonic-3.0/issues/ # issue / 55   -  person glebd    schedule 15.07.2009


Ответы (1)


Мне кажется, что это ошибка в SubSonic. Вы должны сообщить об этом на github.

А пока этот код может решить проблему:

Layout layout = Layout.SingleOrDefault(x => x.UserID == user.id && x.WidgetID == id);
layout.Delete();
person Adam Cooper    schedule 14.07.2009