2

我有 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 。这个问题有什么解决方案吗?

提前致谢

4

2 回答 2

1

您是否有任何机会禁用延迟加载?您可以尝试像这样急切加载实体:

var firstPlayer = dbContext.Players.Include("SelectedTeams").FirstOrDefault<Player>(p => p.PlayerId == 1);
var copiedPlayer = repo.CreateTemplate(firstPlayer);

此外,您不应将现有实体的引用复制到新实体。

copyselectedteams = selectedTeams;

而是复制它的属性(当然除了关系键,否则你会得到例外)。

于 2012-05-10T11:21:16.173 回答
1

您正在覆盖对刚刚创建的新对象的引用:

var copyselectedteams = new SelectedTeams(); //overwritten...
copyselectedteams = selectedTeams; //...here
于 2012-05-10T10:53:56.070 回答