我有一个使用 Entity Framework 的 MVC3 项目
我有带有 player
的实体,用户应该能够复制该实体。
要制作 player
的副本,我的存储库中有以下内容:
public Player CreateTemplate(Player player)
{
var copy = new Player();
copy.Birth_Date = player.birth_Date;
copy.Comment = player.Comment;
copy.Name = player.Name;
copy.Agent = player.Agent;
copy.AgentId = player.AgentId;
foreach (SelectedTeams selectedTeams in player.SelectedTeams.ToList())
{
var copyselectedteams = new SelectedTeams();
copyselectedteams = selectedTeams;
copy.SelectedTeams.Add(copyselectedteams);
}
db.AddToPlayer(copy);
db.SaveChanges();
return copy;
}
对我来说问题是,一旦我的 foreach 开始循环,我原来的 player
就会失去它的 SelectedTeams
这个问题有什么解决办法吗?
提前致谢
最佳答案
您是否禁用了延迟加载? 您可以尝试像这样预先加载实体:
var firstPlayer = dbContext.Players.Include("SelectedTeams").FirstOrDefault<Player>(p => p.PlayerId == 1);
var copiedPlayer = repo.CreateTemplate(firstPlayer);
此外,您不应将现有实体的引用复制到新实体。
copyselectedteams = selectedTeams;
而是复制其属性(当然关系键除外,否则您会得到异常(exception))。
关于asp.net-mvc - 当使用 Entity Framework 在 MVC 中保存实体副本时,foreach 循环无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10531290/