将对象检索到内存时,Attach和Single之间的区别

时间:2015-10-03 14:38:48

标签: entity-framework ef-code-first

我知道我可以使用外键而不是将整个对象放在内存中。只是为了好奇,我想知道哪种方法更好:在这个1对多关系场景中使用Attach或Single()?哪一个在性能方面更好?

使用Attach();

        Player myPlayer = new Player();
        myPlayer.FullName = txt_Name.Text;

        Team myTeam = new Team { TeamId = Convert.ToInt32(drp_Teams.SelectedValue) };
        db.Teams.Attach(myTeam);
        myPlayer.CurrentTeam = myTeam;

        db.Players.Add(myPlayer);
        db.SaveChanges();

使用Single():

        Player myPlayer = new Player();
        myPlayer.FullName = txt_Name.Text;

        int teamId = Convert.ToInt32(drp_Teams.SelectedValue);
        myPlayer.CurrentTeam = db.Teams.Single(t => t.TeamId == teamId);

        db.Players.Add(myPlayer);
        db.SaveChanges();

1 个答案:

答案 0 :(得分:1)

Single始终从数据库中获取数据,无论此数据是否已加载到上下文中。第一种方法不会查询Team实体的数据库 - 因此在您的方案中它会更好。