EF的优点缺点(EF其实是一种OOP思想的一种体现, 把数据库变成了变成了对象)
优点,1,减少开发成本,不用去写SQL,开发更快
2,ORM一般还能适应不同数据库的迁移
3,包含对象的CSUD操作的API
缺点: 1,因为是通过sql--反射生成sql--自动执行--反射绑定结果所以必定会照常内存资源的占用导致性能降低(其实也降不了多少)
2,SQL固定生成,但是僵化,对索引利用不够好,分页算法就不够好,在复杂的情况下难以应对
EF 申明的3种类型
/// DBFirst:数据库优先,传统的开发模式,有个很重的edmx
/// CodeFirst:代码先行,不关心数据库,从业务出发,然后能自动生成数据库 (可以通过Model(实体)生成SQL表)
/// CodeFirstFromDB:
EF 查看SQL 的方式
/// 1 sqlprofiler (在数据库中去查看)
/// 2 context.Database.Log += s => Console.WriteLine($"当前执行sql:{s}");
EF简单的 增删改查
1 try 2 { 3 using (advanced11Entities context = new advanced11Entities()) 4 { 5 context.Database.Log += s => Console.WriteLine($"当前执行sql:{s}"); 6 7 User user = context.Users.Find(17);//主键查询 8 User user28 = context.Users.FirstOrDefault(u => u.Id == 28); 9 var list = context.Users.Where(u => u.Id > 100); 10 11 User userNew = new User() 12 { 13 Account = "Admin", 14 State = 0, 15 CompanyId = 4, 16 CompanyName = "万达集团", 17 CreateTime = DateTime.Now, 18 CreatorId = 1, 19 Email = "[email protected]", 20 LastLoginTime = null, 21 LastModifierId = 0, 22 LastModifyTime = DateTime.Now, 23 Mobile = "18664876671", 24 Name = "yoyo", 25 Password = "12356789", 26 UserType = 1 27 }; 28 context.Users.Add(userNew); 29 context.SaveChanges();//表示保存 30 31 userNew.Name = "CodeMan"; 32 context.SaveChanges();//表示保存 33 34 context.Users.Remove(userNew); 35 context.SaveChanges();//表示保存 36 } 37 } 38 catch (Exception ex) 39 { 40 Console.WriteLine(ex.Message); 41 } 42 Console.Read();
EF中遇到了实体与库中名字不统一时 可以使用特性(Attribute)来解决
表名称不统一解决办法 表类名称上面添加Table特性书写方法是 例: [Table("JD_Commodity_001")]
属性名称不统一解决办 属性名称上面添加Column特性书写方法是 例: [Column("Title")]
1 //JD_Commodity_001 2 [Table("JD_Commodity_001")] 3 public partial class JDCommodity001 4 { 5 public int Id { get; set; } 6 7 [StringLength(500)] 8 [Column("Title")] 9 public string Text { get; set; } 10 11 }