DbSet<>.Find()
我们常常用Where或First(FirstOrDefault)方法来查找对应的实体,比如:
var people = from p in context.People where p.Name.StartsWith("M") select u; var people = context.People.FirstOrDefault(p => p.Name == "Michael");
这样查找的缺点是:
即使我们相应的实体已经被ObjectContext缓存,EF还是会去执行数据库访问,而数据库访问是被普遍认为比较耗费性能的。
EF4.1为我们提供了一个新的API: DbSet<>.Find()
它可以帮助我们通过主键来查找对应的实体。
如果相应的实体已经被ObjectContext缓存,EF会在缓存中直接返回对应的实体,而不会执行数据库访问。
查找主键PersonID为1的Person实体:
var person = context.People.Find(1);
也可用于联合主键(比如查找主键PersonID=1, PersonName="Michael"的实体):
var person = context.People.Find(1, "Michael");
注意:此处输入联合主键的次序需要按照我们定义改实体类时声明主键的次序。
和之前直接用Where或First的调用不同,Find函数对于刚刚新增的实体也能找到:
using (var context = new MyContext()) { context.People.Add(new People { PersonID = 100 }); var newPerson = context.People.Find(100); }
人各有命,上天注定,有人天生为王,有人落草为寇。脚下的路,如果不是你自己的选择,那么旅程的终点在哪,也没人知道。你会走到哪,会遇到谁,都不一定。