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

difference between Attach and Single when retrieving an object to the memory

我知道我可以使用外键而不是将整个对象放在内存中。出于好奇,我想知道哪种方法更好:在这种一对多关系场景中使用 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();

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