0

ユーザー、ウィジェット、レイアウトのテーブルがあります。ユーザーは、レイアウトを介してウィジェットと多対多の関係を持ちます。各レイアウトには UserID と WidgetID があります。特定の UserID と WidgetID に一致するレイアウトを削除したい。

SubSonic 3 ActiveRecord を使用して、次のように記述します。

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

ただし、SubSonicはユーザーのすべてのウィジェット レイアウトを削除し、条件の 2 番目の部分を無視しているように見えます。私のやり方が間違っているのでしょうか、それとも SubSonic のバグですか? 後者の場合、回避策はありますか?

後で追加: プロジェクトの Models サブディレクトリにある Context.tt で一時的に修正しました。

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;
     }
4

1 に答える 1

1

私にはSubSonicのバグのようです。githubに報告する必要があります

当面の間、このコードは問題を回避する可能性があります。

Layout layout = Layout.SingleOrDefault(x => x.UserID == user.id && x.WidgetID == id);
layout.Delete();
于 2009-07-14T16:41:49.467 に答える