2009-07-14 4 views
0

J'ai des tables Utilisateurs, Widgets et Layouts. Les utilisateurs ont une relation plusieurs-à-plusieurs avec les widgets via les mises en page. Chaque mise en page possède un ID utilisateur et un ID de widget. Je veux supprimer une mise en page qui correspond à un identifiant utilisateur et un identifiant Widget spécifiques.SubSonic 3 ActiveRecord expression lambda partiellement ignorée lors de la suppression

En utilisant SubSonic 3 ActiveRecord J'écris:

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

Cependant, SubSonic supprime tous les mises en page de widget pour l'utilisateur, ignorant apparemment la deuxième partie de la condition. Est-ce que je fais mal, ou est-ce un bug SubSonic? Si ce dernier, y a-t-il des solutions de contournement?

ajouté plus tard: je fixe temporairement dans Context.tt dans mon projet de sous-répertoire Modèles:

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; 
    } 
+1

Oui - s'il vous plaît ajouter cela comme un problème. Ne devrait pas se produire ... –

+0

J'ai le même problème avec une recherche. var items = Personne.Find (x => x.ID == id && x.Name == myStringArray [0]); myStringArray est rempli! – Jon

+0

Filed un nouveau numéro: http://github.com/subsonic/SubSonic-3.0/issues/#issue/55 – glebd

Répondre

1

On dirait un bogue dans subsonique pour moi. Vous devez le signaler à github

En attendant ce code pourrait contourner le problème:

Layout layout = Layout.SingleOrDefault(x => x.UserID == user.id && x.WidgetID == id); 
layout.Delete(); 
+0

Votre solution de contournement semble fonctionner, merci. – glebd