Asp.Net EntityFramework简介

  1. ORM:Object Relation Mapping,通俗说,用操作对象的方式来操作数据库。

  2. 插入数据库不再是执行Insert,而是类似于Person p = new Person(); p.Age=3; p.Name="小明"; db.Save(p);这样的做法。

  3. ORM工具还有很多,比如Dapper、PetaPoco、NHibernate

  4. EF底层仍然是对ADO.Net的封装,EF支持SQLSever、MySql、Oracle、Sqlite等主流的数据库

  5. 使用EF进行数据库开发的时候需要创建数据库和模型类,根据这俩的先后顺序有三种创建方法:

    a.DataBase First (数据库优先):先创建数据库表,然后自动生成EDM文件,EDM文件生成模型类。

    b.Moel First (模型优先):先创建EDM文件 ,EDM文件自动生成数据库和模型类。

    c.Code First (代码优先):程序员自己写模型类,然后自动生成数据库。没有EDM。Data First简单方便,但是项目大了之后用起来会非常痛苦;Code First入门门槛高,适合大项目开发。

  6. EF模型的两种配置方式

    a.DataAnnotations,比如[Table("T_Persons")]、[Column("Name")],这种方式方便,但是耦合度太高,一般最好是POCO(Plain Old C# Object,普通旧的C#对象,没有继承什么特殊的父类,没有标注什么特殊的Attribute,没有定义什么特殊的方法,就是一堆普通的属性);不符合大项目开发的要求。

    b.FluentAPI,微软推荐使用方式。

  7. FluentAPI

    和DataAnnotations不同的是,模型不需要标注Attribute;编写一个XXXConfig类配置映射关系;DbContext中override OnModelCreating方法。

     

  8. EF原理及SQL监控

    EF会自动把Where()、OrderyBy()、Select()等这些编译成“表达式树(Expression Tree)”,然后会把表达式翻译成SQL语句去执行。因此不是把数据取到内存中,在内存中使用集合的方法进行数据过滤,因此性能不会低。但是如果这个操作不能被翻译成Sql语句则报错,或者放到内存中操作,性能就会非常低。

    怎么查看真正执行的Sql?

    DbContext有一个DataBase属性,其中Log属性是Action<string>委托类型,也就是可以指向一个viod A(string str)方法,其中参数就是执行的Sql语句,每次EF执行Sql语句的时候都会执行Log。因此就知道执行了什么Sql。

    EF的查询是“延迟执行”,只有遍历结果集的时候才会执行select查询,ToList()内部也是遍历结果集形成的List。

    EF可以多次指定Where来实现动态的复合检索,返回类型必须是IQueryable才可以拼成Sql语句,不然就要在内存中进行数据的过滤,效率很低,比如:

    EF的复合检索
     

  9. 因为EF的删除操作是先查后Remove,效率比较低,如果有大批量操作,那么可以直接执行Sql

    EF执行Sql语句

     

  10. EF对象的状态

        为什么查询出来的对象Remove(),在SaveChanges()就会吧数据删除。而自己new一个Person对象,然后Remove()不行?

        因为EF会跟踪对象状态的改变。EF中对象有五个状态:Detached(游离态,脱离态)、Unchanged(未改变)、Added(新增)、Deleted(删除)、Modified(被修改)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值