Violation of PRIMARY KEY constraint 'PK_dbo.SongCategories'. Cannot insert duplicate key in object 'dbo.SongCategories'. The duplicate key value is (2, 3). The statement has been terminated.アップデートエラー:PRIMARY KEY制約のナビゲーションプロパティ違反
私は、ユーザーが歌とナビゲーションプロパティを編集できるようにしようとしています。
public class Song
{
//AudioName, Artist etc
...
public virtual ICollection<Category> Categories { get; set; }
}
public class Category
{
...
public virtual ICollection<Song> Songs { get; set; }
}
EF列Song_Id
とCategory_Id
と、このからSongCategoriesテーブルを作成します。
コントローラー:
[HttpPost]
public ActionResult RequestEdit(EditSongDto editSongDto)
{
var categories = _categoryService.GetCategories().Where(x => editSongDto.SelectedCategoryIds.Any(z => z == x.Id));
_songService.Edit(_songService.GetSong(editSongDto.Song.Id), editSongDto.AudioName, editSongDto.ArtistName, categories);
}
サービス:
public void Edit(Song song, string audioName, string artistName, IEnumerable<Category> categories)
{
song.AudioName = audioName;
song.ArtistName = artistName;
song.Categories = categories.ToList();
_repository.Edit(song);
}
リポジトリ:
と同じものが再びに渡されるときに、この問題が発生public virtual void Edit(T entity)
{
_context.Entry(entity).State = EntityState.Modified;
Save();
}
。ナビゲーションプロパティを正しく更新するにはどうすればよいですか?私は他のスレッドを見てきましたが、答えはまだ分かりません。
試しましたか? _song.Categories.Clear(); _ _song.Categories = categories.ToList(); _ –
@robinetこれは簡単なことではありません。どうもありがとう。あなたがポイントをしたいなら、私は答えを受け入れるでしょう。私は割り当てがそれを上書きするので、私はクリアする必要はないと推測しました。私はそれがまだプロキシの追跡と関係があると思う。 –
最近私はEFでいくつか頭痛を感じています。とにかく心配しないようにしたいと思うなら、私は答えを加えます、私はあなたのような助けを求めてここに来ました:) –