次のコードとの関係を削除しようとしています:
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);
しかし、私はいつもこのエラーを受け取ります:
操作に失敗しました: 1 つ以上の外部キー プロパティが null 非許容であるため、リレーションシップを変更できませんでした。リレーションシップに変更が加えられると、関連する外部キー プロパティが null 値に設定されます。外部キーが null 値をサポートしていない場合は、新しい関係を定義するか、外部キー プロパティに別の非 null 値を割り当てるか、関連のないオブジェクトを削除する必要があります。
ビデオを削除しようとしているのではなく、ユーザーの 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; }
}
Videos には UserProfiles への参照が含まれていません。これは 1 対多の関係です。私が間違っていることは何か分かりますか?
動画クラス:
[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; }
}