2011-03-20 25 views
0

INSERT語句與 FOREIGN KEY約束衝突 「FK_JobList_aspnet_Membership」衝突。 衝突發生在數據庫 「C:\ JOBPOST \ APP_DATA \ ASPNETDB.MDF」, 表「dbo.aspnet_Membership」,列 'UserId'。聲明已被 終止。INSERT與Linq-to-SQL的外鍵異常,但不知道爲什麼?

我FK_JobList_aspnet_Membership設置是:

  • 主表(aspnet_membership
  • 外鍵表(JobList
  • 使用列UserId(uniqueidentifier)兩個表,目前只設置2用戶ID

JobList有其自動可索引的主鍵t JobId。在插入和更新屬性不採取行動,刪除設置爲級聯

在dbml的,我也爲JobList

我不明白,爲什麼在發生異常時,因爲我用戶登錄後使用會員服務設置UpdateCheck=UpdateCheck.Never。它應該沒有衝突。順便說一句,我相信沒有其他插入項目的重複功能。雖然拋出異常,但是新行數據已經用正確的userId成功插入。它每次插入項目時都會拋出這種異常。

protected void LinqDataSourceDetail_Inserting(object sender, LinqDataSourceInsertEventArgs e) 
{   
    if (Page.IsValid == true)  
    {    
     JobPostDataContext db = new JobPostDataContext(); 

     JobList newJob = new JobList(); 
     newJob.JobTitle = ((TextBox)DetailsView1.FindControl("TB_JobTitle")).Text; 
     newJob.Summary = ((TextBox)DetailsView1.FindControl("TB_Summary")).Text; 
     newJob.Detail = ((TextBox)DetailsView1.FindControl("TB_Detail")).Text; 
     newJob.CompanyName = ((TextBox)DetailsView1.FindControl("TB_CompanyName")).Text; 
     newJob.CompanyEmail = ((TextBox)DetailsView1.FindControl("TB_CompanyEmail")).Text; 
     String date = ((TextBox)DetailsView1.FindControl("TB_PostDate")).Text; 
     newJob.PostDate = (DateTime)Convert.ToDateTime(date); 
     newJob.IsTop = false; 
     newJob.UserId = (Guid)Membership.GetUser(User.Identity.Name).ProviderUserKey; 

     db.JobLists.InsertOnSubmit(newJob); 
     db.SubmitChanges();   
    } 
} 
+0

你確定它沒有插入NULL作爲FK嗎? – 2011-03-20 08:31:22

+0

如果您發佈代碼,XML或數據樣本,請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼樣本」按鈕(「{}」)以精確地格式化和語法突出顯示它! – 2011-03-20 08:38:02

+0

如果用'InsertOnSubmit'在行上放置斷點並檢查'newJob'對象 - 是否將'UserId'設置爲有效的GUID?這個GUID確實存在於aspnet_membership表中嗎? – 2011-03-20 08:39:01

回答

0

這意味着,通過(Guid)Membership.GetUser(User.Identity.Name).ProviderUserKey返回的GUID不出現在aspnet_membership表。

這可能是因爲Membership.GetUser(User.Identity.Name)找不到當前用戶。反過來,這可能是因爲User.Identity.Name也不在aspnet_membership表中。

建議的解決方案:

  • 輸出User.Identity.Name。一種方法是throw new Exception(User.Identity.Name)
  • 檢查名稱是否出現在成員資格表中。

當您不可避免地發現它沒有時,您可以繼續從那裏進行調試。

相關問題