将图像(字节数组)添加到数据库时,DbUpdateException(插入语句与外键约束冲突)

时间:2013-03-26 12:23:49

标签: c# database entity-framework-5

当我尝试通过我的应用程序将照片上传到SQL数据库时,我的db.SaveChanges()中的UploadReferencePhoto ActionResult会抛出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语句与FOREIGN KEY约束冲突\”FK_dbo.ReferencePhoto_dbo.Tenant_UserId \“。冲突发生在数据库\”C:\ USERS \ HOME \ DESKTOP \ LETLORD \ LETLORD \ APP_DATA \ LETLORD.MDF \“中,table \“dbo.Tenant \”,列'UserId'。\ r \ n该语句已被终止。“}

有人可以告诉我内部异常的确切内容以及可能的解决方法吗?如果需要更多代码/信息,请告诉我。

1 个答案:

答案 0 :(得分:1)

试试看这里:

INSERT statement conflicted with the FOREIGN KEY constraint

“FK的工作方式是,该列中的值不能也不在引用表的主键列中。”

如果您使用FK将记录添加到表中,则需要确保包含主键的记录也存在。