我正在尝试删除与以下代码的关系:
var serverVideo = InternalGetVideo(db, videoId);
// get owning user
var owner = InternalGetUser(db, serverVideo.UserId);
// Add/remove video to user's upvotedVideos
if (owner.UpvotedVideos.Contains(serverVideo))
{
serverVideo.UpVotes--;
SaveChanges(db); // Works
owner.UpVotes--;
SaveChanges(db); // Works
owner.UpvotedVideos.Remove(serverVideo);
SaveChanges(db); // Breaks
}
SaveChanges(db);
但我总是得到这个错误:
操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
我不是要删除视频,我只是想从用户的 UpvotedVideos 属性中删除它(它在那里):
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string Username { get; set; }
public int UpVotes { get; set; }
public virtual List<Video> UpvotedVideos { get; set; }
public string Email { get; set; }
}
视频不包含对 UserProfiles 的引用 - 这是一对多的关系。知道我做错了什么吗?
视频类:
[DataContract]
public class Video
{
[Key]
[DataMember(IsRequired = false)]
public int VideoId { get; set; }
[DataMember(IsRequired = false)]
public int UserId { get; set; } // user that created the video, unrelated
[Required]
[DataMember]
public virtual IList<Tag> Tags { get; set; }
}