SingleOrDefault实验
//SingleOrDefault实验 using (var db = new Entities()) { var classes = new Classes() { ClassName = "英语10501" }; db.Classes.Add(classes);//标记添加 var query = from v in db.Classes where v.ClassName == "英语10501" select v; ObjectDumper.Write(query.SingleOrDefault()); //此处输出结果为 NULL 说明SingleOrDefault 方法是直接从数据库中读取 };
说明:我们添加一个班级“英语10501”,并没有调用SaveChanges方法更新到数据库中。使用SingleOrDefault方法查询刚添加的班级。
SQL语句追踪:只执行了一条查询语句,并未执行新增,说明数据存在于内存之中
执行结果:
结论:Single、First、SingleOrDefault 方法是都是直接从数据库中读取
查询内存中的数据
//查询内存中的数据 using (var db = new Entities()) { Console.WriteLine(db.Student.Local.Count);//输出 0 未执行sql 没有数据 }
先加载数据库再查询本地数据
//先加载数据库再查询本地数据 using (var db = new Entities()) { var query = from v in db.Student select v; Console.WriteLine("遍历之前:打印个数:" + db.Student.Local.Count);//输出 0 foreach (var st in query) { ObjectDumper.Write(st.StudentName); } Console.WriteLine("遍历之后:打印个数:" + db.Student.Local.Count);//输出 11 }
执行结果:
Load方法把数据加载到内存
//上面的方法每次操作都要先遍历 改用load using (var db = new Entities()) { //using System.Data.Entity; 扩展方法 db.Student.Load(); Console.WriteLine(db.Student.Local.Count); var query = from v in db.Classes select v; query.Load(); Console.WriteLine(db.Classes.Local.Count); }
执行结果:
说明:Load为扩展方法,需要先导入命名空间:using System.Data.Entity;