.NET ORM学习之EF框架

Entity FrameworkORMapping的一种具体实现

其实Entity Framework的底层也是调用Ado.Net,它是更高层次的封装.作为数据访问的技术,Entity Framework的设计有高扩展性,这一点可体现在其映射定义的灵活性.简单地说,使用Entity Framework可以充分地定义与数据库表映射的实体,这个实体可以直接用于业务逻辑层或作为服务的数据契约.使用EF,可以将实体类的设计工作完全放在EDM的设计过程中,而不需要手工写那些大同小异的代码,令人欣喜的是这个实体模型可以在运行时修改并生效,做到一改全改.我们开发时也不用再频繁地与数据库打交道,我们操作实体模型的同时EF框架自动完成了对数据库的操作

下面就是EF简单增删改查的示例  还是请大家看代码吧

首先在项目中添加一个ADO.NET实体数据模型,设置自己需要的数据库表结构,然后生成实体类

添加数据

增加一条记录

上下文实体类在数据模型DataModel.Context.tt里面

            DataModelContainer dbContext = new DataModelContainer();//创建上下文

            Customer customer = new Customer();//创建一个实体对象
            customer.CusName = "张三";//给属性赋值

            dbContext.Customer.Add(customer);//添加实体
            dbContext.SaveChanges();//将上下文所更新的数据保存到数据库中
添加两个表的相关记录

            DataModelContainer dbcontext = new DataModelContainer();

            //添加一个用户
            UserInfo userInfo =new UserInfo();
            userInfo.UserName = "用户";
            dbcontext.UserInfo.Add(userInfo);//告诉上下文对这个实体进行添加
            
            //添加两个订单
            OrderInfo order1 = new OrderInfo();
            order1.Content = "订单3";
            dbcontext.OrderInfo.Add(order1);

            OrderInfo order2 = new OrderInfo();
            order2.Content = "订单4";
            dbcontext.OrderInfo.Add(order2);

            //关联三个实体  两种方法
            //1.通过用户添加订单实体到导航属性
            userInfo.OrderInfo.Add(order1);
            //2.通过订单指定用户实体
            order2.UserInfo = userInfo;
	    dbContext.SaveChanges();

用户表跟订单表是1对多的关系,所以用户表的导航属性OrderInfo是ICollection<OrderInfo>集合,

而订单对用户是唯一的,两种方式都可以添加


删除数据

            DataModelContainer dbcontext = new DataModelContainer();
            UserInfo userInfo = new UserInfo();
            userInfo.ID = 1;

            //删除数据
            dbcontext.Entry(userInfo).State = EntityState.Deleted;//枚举
            dbcontext.SaveChanges();

修改数据

            UserInfo userInfoEdit = new UserInfo();
            userInfoEdit.ID = 1;
            userInfoEdit.UserName = "张三" + DateTime.Now;

            //修改全部
            dbcontext.Entry(userInfoEdit).State = EntityState.Modified;//枚举

            //修改单个属性
            dbcontext.UserInfo.Attach(userInfoEdit);
            dbcontext.Entry<UserInfo>(userInfoEdit).Property(u => u.UserName).IsModified = true;

            dbcontext.SaveChanges();

删除跟修改相对比较简单,下面详细说说查询(linq跟lambda两种方式)

查询数据

查询所有数据

            //查询所有数据
            foreach (Class _cc in dbschool.Class)
            {
                Console.WriteLine(_cc.Id + " " + _cc.classname);
            }

            //linq表达式的返回值类型IQueryable<out T>
            var temp = from u in dbschool.Class
                       where u.Id > 1//查询条件
                       select u;
            foreach (var item in temp)
            {
                Console.WriteLine(item.Id + " " + item.classname);
            }

表连接查询

            var temp = from u in dbcontext.UserInfo.Include("OrderInfo")
                       where u.ID > 0 && u.UserName.Contains("张")
                       select u;

            //第一种延迟加载
            foreach (var userinfo in temp)//用到的时候才会去查询数据
            {
                Console.WriteLine(userinfo.ID + " " + userinfo.UserName);
            }

            //第二种延迟加载
            //数据量庞大的时候使用延迟加载,linq不包含include
            //数据量小的时候使用include的提高效率
            foreach (var userinfo in temp)
            {
                foreach (var orderinfo in userinfo.OrderInfo)
                {
                    Console.WriteLine(userinfo.UserName + " " + orderinfo.ID + " " + orderinfo.Content);
                }
            }


分页查询

            lambda表达式写法
            var temp = dbcontext.UserInfo//查询表名
                .Where(u => u.UserName.Contains("用户"))//查询条件
                .OrderBy(u => u.ID)//排序
                .Skip(5 * 2)//跳过指定条数
                .Take(5);//查询多少条

            //linq写法
            var temp = (from u in dbcontext.UserInfo
                        where u.ID > 0
                        orderby u.ID descending//降序
                        select u).Skip(5 * 2).Take(5);

            foreach (var item in temp)
            {
                Console.WriteLine(item.ID + " " + item.UserName);
            }


以上是我自学过程中所整理的笔记,希望能对正在学习EF框架的朋友一些帮助

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值