【EF学习笔记05】----------操作内存中的数据

本文通过实验演示了如何使用EF的SingleOrDefault方法查询内存中的数据,同时对比了数据库查询与内存查询的区别。文章还介绍了如何利用Load方法高效地将数据加载到内存中。

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;

posted on 2016-08-09 10:45 思如雨 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/gosky/p/5752194.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值