zoukankan      html  css  js  c++  java
  • .Net 数据访问层之ORM框架EF简介

    应用程序和数据库采用Tcp协议通讯

    ORM框架有: NHibernate ,Dapper ,Mybatis 底层是 ADO.Net

    好处:

    1.面向对象

    2.没有sql减少学习成本,快速开发

    3.编译检测会更有用(写sql,字段改了,漏改sql就会异常)

    3.有编译检测(改了数据库字段,必须修改,否则报错)?

    4.支持延迟特性,缓存

    缺陷:

    1.sql是自动生成,比较僵化,不确定是否使用索引

    2.需要很多反射,对时间和空间有损耗(类,属性,特性)

    3.比较复杂的查询不合适,用SQL 或 存储过程,  注意EF查询的性能优化,和SQL性能优化,

    大家不要排斥ORM,因为ORM只是一个工具,虽然不能帮你把所有的事儿都做的尽善尽美,但是它有自己的价值,而且它也可以直接用ado.net的

    一张应用程序,ORM,ADO.Net 和数据库的图,还有代码层面的

     举一个栗子啊  控制台程序+EF6.几

    namespace Ruanmou.EFDBFirst
    {
        class Program
        {
            static void Main(string[] args)
            {
                try
                {
                    Console.WriteLine("欢迎来到.Net高级班VIP课程,今晚学习EntityFramework");
    
                    //context:数据库映射,一定有个数据库连接,一开始实例化是没有任何数据
                    //查询个数据之后会做个trace(克隆), 然后你修改任何数据,能识别到并且翻译成sql执行;;数据不是查询的,那么需要去指定状态
                    using (advanced11EntitiesDbContext context = new advanced11EntitiesDbContext())
                    {
                        context.Database.Log += c => Console.WriteLine($"sql:{c}");
                        User user1 = context.Users.Find(5);//即时查询 查询主键ID=5的用户,艾玛,太神奇了  还有这种操作 。。。
                        var userList = context.Users.Where(u => u.Id > 0 && u.Name.Length > 2);//延时
                        foreach (var item in userList)
                        {
                            Console.WriteLine(item.Name);
                        }
    
                        user1.Name += "test";
                        user1.State += 1;
                        context.SaveChanges();//把context全部的变化更新到数据库
                        User user = context.Users.FirstOrDefault(u => u.Id == 5);//针对数据库查询
                        new List<int>().FirstOrDefault(i => i > 10);//针对内存数据的linq to object
    
                        User userNew = new User()
                        {
                            Account = "Admin",
                            State = 0,
                            CompanyId = 4,
                            CompanyName = "万达集团",
                            CreateTime = DateTime.Now,
                            CreatorId = 1,
                            Email = "57265177@qq.com",
                            LastLoginTime = null,
                            LastModifierId = 0,
                            LastModifyTime = DateTime.Now,
                            Mobile = "18664876671",
                            Name = "yoyo",
                            Password = "12356789",
                            UserType = 1
                        };
                        context.Users.Add(userNew);
                        context.SaveChanges();//自增主键在插入成功后,会自动赋值过去
                        context.Users.Remove(userNew);
                        context.SaveChanges();//本身就是一个事务
                    }
    
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                Console.Read();
            }
        }
    }

    监视执行SQL,贴下图

    以后还能不能愉快的写SQL了。。。

    删除比修改费时,还是用软删除好了

  • 相关阅读:
    Google 地图小例子
    实现网站的中英文转换
    必须掌握的八个【cmd 命令行】
    C#发送email
    sql 参数化查询,添加,删除
    SqlDataReader使用序数索引器
    DataSet数据筛选和排序
    Connect Propertity
    SqlDataReader读取数据
    SqlDataReader读取数据
  • 原文地址:https://www.cnblogs.com/kongsq/p/9784686.html
Copyright © 2011-2022 走看看