2010-09-13 155 views
0

我有2個表用戶和查詢。它們通過查詢表中的FK(UserId)連接。 我需要添加查詢添加,例如,用戶登錄「鮑勃」給所有用戶。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 2010-09-13 16:28:38

+0

設置一個斷點並在迭代時檢查user.UserId的值。確保值存在並對應於數據庫中的有效UserId。 – TimS 2010-09-13 16:31:11

回答

0

確保您的主鍵在數據庫模式中正確設置。您可以查詢沒有主鍵的表,但不能進行插入,除非所有設置都正確,並且數據庫的數據上下文視圖是最新的。

+0

感謝您的幫助,問題是與外鍵約束,不知道我如何解決這個問題,但它只是工作= P – Viktor 2010-09-13 17:18:10

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