0

我有表用户、小部件和布局。用户通过布局与小部件建立多对多关系。每个 Layout 都有 UserID 和 WidgetID。我想删除与特定 UserID 和 WidgetID 匹配的布局。

使用 SubSonic 3 ActiveRecord 我写:

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

但是,SubSonic 删除了用户的所有小部件布局,似乎忽略了条件的第二部分。我做错了吗,或者这是一个 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 回答