1、为什么使用EF执行SQL语句?
1)进行复杂的查询时,直接使用EF执行SQL语句性能会优于使用LINQ自动生成查询语句。
2)某些特殊的查询条件,LINQ无法自动生成查询语句。
2、数据上下文DbContext的Database的属性:
1)ExecuteSqlCommand()不返回结果、只返回受影响的行数,适用于执行创建、插入、更新、删除操作(即执行给定的DDL/DML命令)。
2)SqlQuery()返回查询到的结果、并将结果保存在数据实体中,适用于执行查询操作。
二、EF执行SQL语句(二)
1、SqlQuery()使用前需要指定返回值的类型。
1)返回值类型可以是定义的实体类型,或者基元类型。
2、EF调用存储过程
1)在创建实体数据模型,或从数据库更新模型时,选择“存储过程和函数”
2)在模型浏览器中,编辑导入函数
三、Code First
1、步骤:
1)创建应用程序。
2)选择模型内容为“空Code First模型”。(可选)
3)在Models文件夹上右击选择新建类,并命名为User。
4)继续创建Order类后创建数据上下文类MeixinContext。
5)在配置文件中添加连接字符串。
6)编写数据访问代码。
7)打开SQLServer查看效果。
2、Code First检测到数据库和模型两者不匹配时,数据库将被删除并重建以满足匹配关系。
1)可以使用Database.SetInitializer方法来实现这一效果:
Database.SetInitializer( new DropCreateDatabaseIfModelChanges());
四、主从表查询
1、EF提供了三种方式加载从表数据:
1)延迟加载:只在需要的时候加载相关表数据。加载主从表数据需要多次访问数据库。
2)贪婪加载:当主表实体加载时,相关联的从表数据通过连接查询也一同被加载。加载主从表数据只需要一次访问数据库
3)显式加载:类似于延迟加载,但在访问导航属性时不会出现自动加载,需要手动显式指定加载哪个主表对象相关联的从表数据。加载主从表数据也需要多次访问数据库,但由于不是加载全部从表数据,因此访问数据库次数少于延迟加载。
小剧场:如果可以?不,不可以… 英文版:If possible?No,No…