优点:
1、跨数据库支持能力强大,只需修改配置就可以轻松实现数据库切换
2、提升了开发效率,不需要在编写Sql脚本,但是有些特殊Sql脚本EF无法实现,需要我们自己编写(通过EF中的ExecuteSqlCommand实现插入、修改、删除、SqlQuery执行查询)
3、EF提供的模型设计器十分强大,可以让我们清晰的指定或者查看表与表之间的关系(一对多,多对多..)
4、EF提供的导航属性十分好用
5、EF的延迟查询加载机制,数据在用到的时候才会去数据库查询
缺点:
1、性能差(生成Sql脚本阶段),在复杂查询的时候生成的脚本不是很高
2、第一次执行时会有预热,预热时性能较差,不过将映射关系加载到内存之后就会好很多
原因:
使用EF第一次加载程序会很慢,因为EF第一次会生成实体类和数据库的对应关系并做缓存;
对于在应用程序中定义的每个DbContext类型,在首次使用时,Entity Framework都会根据数据库中的信息在内存生成一个映射视图(mapping views),而这个操作非常耗时。
在第1次调用DbContext进行数据库操作时会进行缓慢的mapping views生成操作,后续的DbContext操作会共享已经生成的mapping views,不受这个问题影响。但是要注意的是定义的每一个DbContext都会面临这个问题。
3、EF的侵入性很强,一旦在项目中使用,很难将其撤掉(毕竟用起来十分的爽)