我有一个使用代码优先 (POCO)、EF、ViewModels 和 AutoMapper 的 MVC 4 示例应用程序。我创建了一个控制器,其中父实体和相应的子实体位于同一视图上(具有嵌套子实体集合的实体)。到目前为止看起来不错,除了我在更新记录时遇到问题。我收到以下错误:
操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
我在网上搜索了很多天,现在尝试不同的解决方案,但无法正常工作。
我有以下域模型:
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);
}
我在这里想念什么?