2013-03-26 51 views
1

當我嘗試通過我的應用程序將照片上載到SQL數據庫時,DbUpdateException正在我UploadReferencePhoto ActionResult中的db.SaveChanges()處拋出。我先用代碼表繼承來使用代碼。對與場景模式如下:將圖像(字節數組)添加到數據庫時,DbUpdateException(插入語句與外鍵約束衝突)

用戶配置:

[Table("UserProfile")] 
public class UserProfile 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 
    // ... 
} 

租戶:

[Table("Tenant")] 
public class Tenant : UserProfile 
{ 
    public Tenant() 
    { 
     this.ReferencePhotos = new List<ReferencePhoto>(); 
    } 

    public virtual ICollection<ReferencePhoto> ReferencePhotos { get; set; } 
} 

圖片:

[Table("Image")] 
public class Image 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int ImageId { get; set; } 
} 

ReferencePhoto:

[Table("ReferencePhoto")] 
public class ReferencePhoto : Image 
{ 
    // 1:many with Tenant 
    public int UserId { get; set; } 
    [ForeignKey("UserId")] 
    public virtual Tenant Tenant { get; set; } 
} 

所以Tenant延伸UserProfileReferencePhoto延伸Image。當我點擊上傳時會引發上述異常。內部異常如下:

「INSERT語句衝突與外鍵約束\」 FK_dbo.ReferencePhoto_dbo.Tenant_UserId \ 「該衝突發生於數據庫\」 C:\ USERS \首頁\桌面\ LETLORD \ LETLORD \ APP_DATA \ LETLORD.MDF \ 「表\ 」dbo.Tenant \「,列 '用戶ID'。\ r \ n該語句已終止。」}

有人能告訴我到底什麼內部異常是在說,並可能如何解決它?讓我知道是否需要更多的代碼/信息。

回答

1

試看看這裏:

INSERT statement conflicted with the FOREIGN KEY constraint

「一個FK的工作方式是它不能在該列中,是不是也被引用表的主鍵列中的值。」

如果您將記錄添加到帶有FK的表中,則需要確保包含主鍵的記錄也存在。

+0

謝謝,通過設置FK'reference.UserId = tenantRepository.GetLoggedInTenant()。UserId;'解決了問題。出於某種原因,我不認爲我必須自己明確設置FK。 – MattSull 2013-03-26 13:40:25

+2

我會爲你感到高興,但我是一名瓦肯人,無法表現出人類的情感。 – 2013-03-26 16:44:38

相關問題