-1
エンティティフレームワークのトラッキングを維持しながらナビゲーションコレクションのプロパティを更新するにはどうすればよいですか?asp.net mvcナビゲーションコレクションの更新
ドメイン:
public class BuyLink
{
public int Id { get; set; }
string _buyLinkUrl;
public string BuyLinkUrl
{
get
{ return _buyLinkUrl; }
set
{
if (!string.IsNullOrWhiteSpace(value))
_buyLinkUrl = value;
}
}
}
DTO:
public class BuyLinkDto
{
public int Id { get; set; }
public string BuyLinkUrl { get; set; }
}
コントローラー:
例えば、_songService.GetSong(editSongDto.Song.Id).BuyLinks
は、追跡して、現在のbuyLinksは、しかし、どのように私はこのコレクションを更新しない取得んこのトラッキングの変更を失うことなく、editSongDto.BuyLinksからユーザーが編集を提供しましたか?
[HttpPost]
public ActionResult RequestEdit(EditSongDto editSongDto)
{
//Doesn't work well because entity Framework doesn't track with this assignment so it adds to the database instead of updating.
var buyLinks = _songService.GetSong(editSongDto.Song.Id).BuyLinks = editSongDto.BuyLinkDtos.Select(x => new BuyLink { BuyLinkUrl = x.BuyLinkUrl }).ToList();
_songService.Edit(_songService.GetSong(editSongDto.Song.Id), editSongDto.AudioName, editSongDto.ArtistName, buyLinks);
return View("Index");
}
サービス:
public void Edit(Song song, string audioName, string artistName, IEnumerable<BuyLink> buyLinks)
{
song.AudioName = audioName;
song.ArtistName = artistName;
song.BuyLinks = buyLinks?.ToList();
_repository.Edit(song);
}
レポ:
public virtual void Edit(T entity)
{
_context.Entry(entity).State = EntityState.Modified;
_context.SaveChanges();
}