2010-09-13 5 views
0

У меня есть 2 таблицы пользователей и запросы. Они подключаются через FK (UserId) в таблице Queries. Мне нужно добавить запросы, добавленные, например, пользователем с логином «Боб» для всех пользователей.Задача Linq to Sql

Вот кусок кода, я использую:

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

Он бросает ошибку при добавлении: Инструкция INSERT заявление противоречит ограничение внешнего ключа «FK_Queries_Users». Конфликт произошел в базе данных «OLAPUsers», таблице «dbo.Users», в столбце «UserId».

Как я могу исправить это или заархивировать цель, которую у меня есть?

+1

Ваш UserDataClassesDataContext работает правильно? Если свойство UserId не установлено правильно, это может привести к этому. – JamesMLV

+0

Установите точку останова и проверьте значение user.UserId при повторении. Убедитесь, что значения присутствуют и соответствуют действительному UserId в базе данных. – TimS

ответ

0

Убедитесь, что ваши первичные ключи правильно настроены в схеме БД. Вы можете запрашивать таблицы без первичных ключей, но вы не можете делать вставки, если все не настроено правильно, а представление контекста данных для БД является текущим.

+0

Спасибо за помощь, проблема была связана с ограничениями внешнего ключа, dunno, как я исправил это, но он просто работает = P – Viktor

0

Попробуйте это:

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