Code First (POCO)、EF、ViewModels、および AutoMapper を使用する MVC 4 サンプル アプリケーションがあります。親エンティティと対応する子エンティティが同じビュー (子エンティティのネストされたコレクションを持つエンティティ) にあるコントローラーを作成しました。レコードの更新に問題があることを除けば、これまでのところ良さそうです。次のエラーが表示されます。
操作に失敗しました: 1 つ以上の外部キー プロパティが null 非許容であるため、リレーションシップを変更できませんでした。リレーションシップに変更が加えられると、関連する外部キー プロパティが null 値に設定されます。外部キーが null 値をサポートしていない場合は、新しい関係を定義するか、外部キー プロパティに別の非 null 値を割り当てるか、関連のないオブジェクトを削除する必要があります。
私は何日もオンラインで検索してさまざまなソリューションを試してきましたが、うまくいきませんでした。
次のドメイン モデルがあります。
public class Team
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Player> Players { get; set; }
}
public class Player
{
public int Id { get; set; }
public string Name { get; set; }
public int TeamId { get; set; }
public virtual Team Team { get; set; }
}
対応するビューモデル:
public class TeamVM
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<PlayerVM> Players { get; set; }
}
public class PlayerVM
{
public int Id { get; set; }
public string Name { get; set; }
public int TeamId { get; set; }
public virtual TeamVM Team { get; set; }
}
私のマッピングは次のとおりです。
Mapper.CreateMap<Player, PlayerVM>();
Mapper.CreateMap<PlayerVM, Player>();
Mapper.CreateMap<Team, TeamVM>();
Mapper.CreateMap<TeamVM, Team>();
私のチームコントローラーの編集アクションは次のとおりです。
[HttpPost]
public ActionResult Edit(TeamVM teamVM)
{
if (ModelState.IsValid)
{
Team team = context.Teams.Find(teamVM.Id);
Team updatedTeam = Mapper.Map<TeamVM, Team>(teamVM, team);
context.Entry(team).CurrentValues.SetValues(updatedTeam);
context.SaveChanges();
return RedirectToAction("Index");
}
return View(teamVM);
}
ここで何が欠けていますか?