当我尝试通过我的应用程序将照片上传到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
延伸UserProfile
,ReferencePhoto
延伸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该语句已被终止。“}
有人可以告诉我内部异常的确切内容以及可能的解决方法吗?如果需要更多代码/信息,请告诉我。
答案 0 :(得分:1)
试试看这里:
INSERT statement conflicted with the FOREIGN KEY constraint
“FK的工作方式是,该列中的值不能也不在引用表的主键列中。”
如果您使用FK将记录添加到表中,则需要确保包含主键的记录也存在。