将对象检索到内存时 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 实体 - 因此在您的场景中它更好。
我知道我可以使用外键而不是将整个对象放在内存中。出于好奇,我想知道哪种方法更好:在这种一对多关系场景中使用 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 实体 - 因此在您的场景中它更好。