2012-12-25 88 views
0

我在兩個表之間有一對多的關係(一個用戶可以有多個專輯),專輯表也和其他表有關係。 問題是,當我想保存一個專輯時,FOREIGN KEY約束將發生異常,但用戶存在並指定了外鍵。FOREIGN KEY約束例外

這裏的例外:

INSERT語句衝突與外鍵約束 「FK_Albums_CreatedBy」。
數據庫「{數據庫名稱}」,表「dbo.Users」,列'Id'中發生衝突。
該聲明已被終止。

這是專輯的映射代碼和用戶在專輯類的構造函數:

this.HasRequired(t => t.CreatedBy) 
      .WithMany(t => t.Albums) 
      .HasForeignKey(d => d.CreatedById); 

這是節省代碼:

private void InsertAlbum(MyContext context, Album album) 
{ 
    album.Guid = Guid.NewGuid(); 
    album.CreatedDateTime = DateTime.Now; 
    album.CreatedBy = context.Users.Single(u => u.UserName == "SomeUser"); // User exists and has Id = 1 
    album.RowVersion = Guid.NewGuid(); 

    // Assigning other relations... 

    context.Albums.Add(album); 
    context.SaveChanges(); // This is the place that the exception occurs. 
} 

UPDATE

我發現錯誤是acctualy錯誤,因爲白蛋白ums表與Metadatas表有着另一種一對多關係,如果我沒有在專輯中插入任何元數據,我將不會收到任何異常。 現在我不確定什麼會導致錯誤,爲什麼它會顯示錯誤。

+0

你能張貼代碼爲實體和配置類? –

+0

我會啓動數據庫上的一個分析器來查看哪些SQL語句實際上正在執行。 –

+0

你建議使用哪種分析器? – mrtaikandi

回答

0

它看起來像你設置CreatedBy用戶,而不是用戶ID。嘗試是這樣的:

album.CreatedBy = context.Users.Single(u.id) 

(對不起,我不知道正確的語法在這裏,但這個概念應該是正確的)

+0

這不是這樣,因爲context.Users.Single(u => u.UserName ==「SomeUser」);將返回用戶的一個實例。 UserName在我的數據庫中是唯一的。 – mrtaikandi