2

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がループを開始すると、元の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 に答える