2010-09-13 8 views
0

J'ai 2 tables Utilisateurs et Requêtes. Ils sont connectés via FK (UserId) dans le tableau Requêtes. Je dois ajouter des requêtes ajoutées, par exemple, par l'utilisateur avec le login "Bob" à tous les utilisateurs.Problème Linq to Sql

Voici un morceau de code j'utilise:

public bool SaveUserQuery(string userName, Query query) { 

     var db = new UserDataClassesDataContext(); 

     Table<User> users = db.Users; 
     if (userName.ToLower() == "bob") { 
      foreach (var user in users) { 
       var tempQuery = new Query(); 
       tempQuery.Name = query.Name; 
       tempQuery.FolderName = query.FolderName; 
       tempQuery.Layout = query.Layout; 
       tempQuery.Description = query.Description;      
       tempQuery.Query1 = query.Query1; 
       tempQuery.UserID = user.UserId; 

       try { 
        user.Queries.Add(q); 
       }    
       catch (Exception e) { 

        Logger.Log.Error("attach", e); 
       }      
      } 
      db.SubmitChanges(); 
      return true; 
     } 
    } 

Il jette une erreur lors de l'ajout: L'instruction INSERT en conflit avec la contrainte FOREIGN KEY "FK_Queries_Users". Le conflit s'est produit dans la base de données "OLAPUsers", la table "dbo.Users", la colonne "UserId".

Comment puis-je résoudre ce problème ou archiver l'objectif que j'ai?

+1

Votre UserDataClassesDataContext fonctionne correctement? Si la propriété UserId n'est pas définie correctement, cela peut provoquer cela. – JamesMLV

+0

Définissez un point d'arrêt et vérifiez la valeur de user.UserId pendant que vous parcourez. Assurez-vous que les valeurs sont présentes et correspondent à un UserId valide dans la base de données. – TimS

Répondre

0

Assurez-vous que vos clés primaires sont correctement configurées dans le schéma de base de données. Vous pouvez interroger des tables sans clés primaires, mais vous ne pouvez pas effectuer d'insertions à moins que tout ne soit correctement configuré et que l'affichage du DB de contexte de données soit en cours.

+0

Merci pour l'aide, le problème était avec les contraintes de clé étrangère, je ne sais pas comment j'ai résolu cela, mais cela fonctionne juste = P – Viktor

0

Essayez ceci:

public bool SaveUserQuery(string userName, Query query) 
{ 
    var db = new DataContext(); 
    if (userName.ToLower() == "bob") 
    { 
     List<Query> queries = new List<Query>(); 
     foreach (var user in db.GetTable<Users>()) 
     { 
     Query tempQuery = new Query(query.Name, query.FolderName, query.Layout, query.Description, query.Query1, user.UserId); 
     //and ofc create this constructor 
     queries.Add(tempQuery);    
     } 
     db.GetTable<Query>().InsertAllOnSubmit(queries); 
     db.SubmitChanges(); 
     return true; 
    } 
}