使用 EF 4.1 或者更新版本, 你可以直接执行任何数据库命令. 在本节介绍的方法允许你对数据库执行原生的 SQL 命令.
通过 SQL 查询语句获取实体对象集
DbSet 类中的 SqlQuery 方法允许你执行一个返回实体对象集的原生 SQL 查询. 默认情况下, 返回的对象集会被上下文跟踪; 这可以通过对方法返回的 DbSqlQuery 对象调用 AsNoTracking 方法取消.返回的结果集一般为 DbSet 所对应的类型, 否则即便是其派生类也无法返回. 如果所查询的表包含了其他实体类型的数据, 那么所执行的 SQL 语句应该被正确书写, 保证只返回指定类型实体的数据. 下面的例子使用 SqlQuery 方法执行了一个 SQL 查询, 返回一个 Department 类型的实例集.
using (var context = new SchoolEntities()) { var departments = context.Departments.SqlQuery( "select * from Department").ToList(); }
译注: AsNoTracking 方法必须再查询执行前调用, 查询执行后调用无效.
通过 SQL 查询获取非实体对象集
通过 Database 类中的 SqlQuery 方法来执行原生 SQL 命令, 可以返回任何类型的实例, 包括 .Net 中的原生类型. 但获取的数据将不会被上下文对象跟踪, 即使我们用这个方法来检索实体对象. 如:
using (var context = new SchoolEntities()) { var names = context.Database.SqlQuery<string>("select Name from Department").ToList(); }
让数据库执行原生的非查询 SQL 命令
可以通过 Database 类中的 ExecuteSqlCommand 方法执行非查询命令. 例如:
using (var context = new SchoolEntities()) { context.Database.ExecuteSqlCommand("update Department set Name = 'Mathematics' where Name = 'Math'"); }
ExecuteSqlCommand 方法有时会被用在 Code First 创建的数据库的初始化函数中, 用来对数据库进行一些额外的配置 (例如, 设置索引). 需要注意的是, 上下文对象并不知道执行了 ExecuteSqlCommand 方法后数据库中的数据有什么改变, 除非你从数据库中载入或重新载入实体集.
调用存储过程
Code First 并不支持对存储过程的映射. 但是, 你可以通过 ExecuteSqlCommand 或 SqlQuery 方法直接调用存储过程. 例如: context.Database.ExecuteSqlCommand ("EXECUTE [dbo].[DoSomething]").
译注: 本文提到的三个方法 (DbSet.SqlQuery, Database.SqlQuery, Database.ExecuteSqlCommand) 都支持参数化查询, 用法和 string.Format 类似, 但是在查询执行时会对传入的参数进行类型转换. 如: context.Departments.SqlQuery("select * from Department where DepartmentID = {0}", "6"); 该语句执行时, 会将字符串 "6" 转化为整数然后再代入查询语句中执行, 可以有效防止 SQL 注入.
防止 SQL 注入攻击
应用程序经常要从外部获取输入 (来自用户和其他外部代理) , 然后根据这些输入执行相关操作. 从用户或外部代理直接或间接获取的任何信息都可能利用目标程序语言的语法来执行违法操作. 当目标语言是结构化查询语言 (SQL) 时, 例如 Transact-SQL, 这个操作被称为 SQL 注入攻击. 恶意的用户可以直接在查询中注入命令执行操作, 删除数据库中的一个表, 拒绝提供服务或修改正在执行的操作的性质. 故你应该使用参数化的查询, 而不是直接将从外部获取的字符串插入到查询字符串中.
相关推荐
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot...
描述中提到的"自己改的支持Mysql的",意味着有开发者或社区成员已经对原版的EntityFramework.Extended进行了修改,使其能够适配MySQL数据库,这通常涉及到对内部代码的调整,以匹配MySQL的特定语法和功能。...
7. **运行应用**:使用`mvnw`或`mvnw.cmd`命令启动Spring Boot应用,确保应用能正常连接到数据库并执行SQL查询。 8. **测试**:通过`src/main/resources`目录下的Mapper XML文件编写SQL语句,或者使用`@Select`等...
Z.EntityFramework.Extensions则提供了批量更新接口,允许开发者一次性设置更新条件和更新内容,然后执行一个单一的数据库命令,极大地提升了性能。 批量添加也是开发中常见的需求,比如在导入大量数据时。Z.Entity...
Map<String, String> filterChainDefinitionMap = new LinkedHashMap<>(); filterChainDefinitionMap.put("/logout", "logout"); filterChainDefinitionMap.put("/login", "anon"); filterChainDefinitionMap....
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot...
当你尝试在Service Fabric Application项目中通过`Install-Package EntityFramework`来添加Entity Framework时,系统会报错,因为它不支持添加框架引用。Service Fabric应用项目主要是用来管理和部署服务,而非承载...
Entity Framework(EF)是Microsoft开发的一个对象关系映射(ORM)框架,用于.NET应用程序,它允许开发者使用面向对象的编程语言(如C#或VB.NET)来操作数据库,而无需编写大量的SQL语句。这个“Entity Framework...
在SQLite和EF6的结合使用中,我们需要安装相应的NuGet包,如`System.Data.SQLite`和`EntityFramework`。安装完成后,我们可以在EF6的`DbContext`派生类中定义数据实体,并配置SQLite数据库的连接字符串。例如: ```...
EntityFramework.dll是微软开发的一个强大的对象关系映射(ORM)框架——Entity Framework的核心组件,主要用于.NET应用程序中。这个4.1版本的DLL文件是Entity Framework的早期版本,它为开发者提供了一个更简单的...
ADO.NET 4.0作为.NET Framework的一部分,提供了多种用于连接数据库、执行命令、检索数据以及更新数据的方法。 - **Entity Framework**:简称EF,是一种对象关系映射(ORM)工具,它使得开发者能够以面向对象的方式...
EntityFramework.Utilities通过优化内部处理逻辑,确保了即使在有继承关系的实体模型下,也能顺利执行批处理命令,避免了因类型不匹配或其他相关问题导致的异常。 在使用EntityFramework.Utilities时,你可以轻松地...
现在,当运行应用程序并执行数据库操作时,EF会检查数据库是否符合我们的模型。如果没有,它会根据我们的类定义自动创建数据库和表。 使用EF6的另一个关键点是数据库迁移。随着应用的发展,数据模型可能会发生变化...
4. **执行代码生成**:配置完成后,重新启动项目,然后运行`mybatis-generator:generate`命令以生成所需的代码。生成的代码通常包括`*.java`接口文件、`.xml`映射文件以及实体类文件。 #### 四、常见问题及解决方案...
H2提供了命令行工具进行数据库的升级、备份和恢复,如`SCRIPT`命令用于创建数据库脚本,`RUNSCRIPT`命令用于执行脚本。 通过本教程,用户可以全面了解并有效地在各种场景下使用H2Database,无论是开发测试还是生产...
- **DbContext**:是EF Core的核心类,用于管理数据库连接、跟踪实体状态和执行数据库操作。 - **Entity**:表示数据库中的表,是模型类,通过属性与数据库表的列对应。 - **DbContext Generator**:自动生成...
<groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</...
4. **配置Service和Controller**:在Service层,我们可以注入Mapper接口,通过它来执行数据库操作。在Controller层,我们调用Service层的方法,完成业务逻辑。例如: ```java @Service public class UserService...
14. **EDM中的DML**:介绍了如何使用Entity Framework执行数据操作语言(DML)命令,如插入、更新和删除等操作。 15. **含有Association的EDM的使用**:讲解了如何在EDM中定义和使用关联关系,以实现实体之间的复杂...
在这个"EntityFramework.zip"压缩包中,我们可以预见到一系列关于如何使用EF进行数据库操作的示例代码,包括基本的CRUD操作(创建、读取、更新、删除)、执行SQL语句以及通过NUnit、XUnit、MsUnit三种不同的单元测试...