asp.net-mvc - 当使用 Entity Framework 在 MVC 中保存实体副本时,foreach 循环无法正常工作

标签 asp.net-mvc asp.net-mvc-3 entity-framework entity-framework-4

我有一个使用 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/

相关文章:

asp.net - 添加并保留 "temporary"声明

asp.net - 使用 Asp.Net Identity 2 在 AspNetUserClaims 中存储用户信息有什么好处吗?

asp.net-mvc - 关于 MVC 4 和 jQuery 的教程或书籍

c# - Linq从一个表中选择数据而不是在另一个表中

.net - 写入大型 BLOB 会抛出 InvalidOperationException

c# - 来自默认 ASP.NET MVC 新项目的异步操作的解释?

asp.net-mvc-3 - 使用富文本编辑器创建 MVC 博客

c# - MVC 3 - 如何实现服务层,我需要存储库吗?

c# - 只返回特定属性

c# - 如何处理 EF 4.3.1 设置修改了 Rowversion 行