EF版本:6.0.0

EF对大量数据或多表连接一次操作耗时较大,或要求响应时间尽可能小,因此采用EF框架执行SQL语句的方案

1DbContext.Database

这个类包含了大量的操作方法,见截图:

查询方法举例:

using (CustomDbContext db = new CustomDbContext())
{
string sql = "SELECT * FROM collections LEFT JOIN collectionusers ON collections.`Id`=collectionusers.`Collection_Id`";
var task = db.Database.SqlQuery<Collection>(sql).ToListAsync();
task.Wait();
var r = task.Result;
}

删除方法举例:

using (CustomDbContext db = new CustomDbContext())
{
string sql = "delete from collectionusers where Id=@id";
var num = db.Database.ExecuteSqlCommand(sql, new MySqlParameter("@id", ));
}

注意操作Mysql数据库,一定要是有MySqlParameter而不能使用SqlParameter,使用SqlParameter会抛出异常:Only MySqlParameter objects may be stored

更新方法举例:

using (CustomDbContext db = new CustomDbContext())
{
string sql = "update collectionusers set InsertTime=@time where Id=@id";
var num = db.Database.ExecuteSqlCommand(sql, new MySqlParameter("@time", DateTime.Now),new MySqlParameter("@id", ));
}

插入方法举例:

using (CustomDbContext db = new CustomDbContext())
{
db.Database.ExecuteSqlCommand("SET SQL_SAFE_UPDATES=0");//不启用更新安全模式
db.Database.ExecuteSqlCommand("SET FOREIGN_KEY_CHECKS=0");//取消外键约束
string sql = "INSERT INTO collectionusers (`InsertTime`, `Collection_Id`, `User_Id`)VALUES(@insertTime,@cid, @uid)";
var num = db.Database.ExecuteSqlCommand(sql, new MySqlParameter("@insertTime", DateTime.Now), new MySqlParameter("@cid", ), new MySqlParameter("@uid",));
}

事务操作举例:

CustomDbContext db = null;
DbContextTransaction tran = null;
try
{
db = new CustomDbContext();
tran = db.Database.BeginTransaction();
db.Database.ExecuteSqlCommand("SET SQL_SAFE_UPDATES=0");//不启用更新安全模式
db.Database.ExecuteSqlCommand("SET FOREIGN_KEY_CHECKS=0");//取消外键约束
string sql = "INSERT INTO collectionusers (`InsertTime`, `Collection_Id`, `User_Id`)VALUES(@insertTime,@cid, @uid)";
var num = db.Database.ExecuteSqlCommand(sql, new MySqlParameter("@insertTime", DateTime.Now), new MySqlParameter("@cid", ), new MySqlParameter("@uid", ));
tran.Commit();
}
catch
{
tran.Rollback();
}
finally
{
if (db != null) db.Dispose();
if (tran != null) tran.Dispose();
}

-----------------------------------------------------------------------------------------

转载与引用请注明出处。

时间仓促,水平有限,如有不当之处,欢迎指正。

Entity Framework——执行sql语句的更多相关文章

  1. Entity Framework执行Sql语句返回DataTable

    Entity Framework中对外开放了数据库连接字符串,使用的时候可以直接得到这个连接字符串,然后进行相关的操作.如果在使用的过程中,发现Entity Framework中有一些满足不了的需求的 ...

  2. Entity Framework 使用sql语句分页(查询视图)

    1.查询视图 //3.查询视图 var sql = @" SELECT D.* FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY TestView.B_M ...

  3. Entity Framework 使用sql语句分页(查询单表)

    1.查询单表 var pageSize = 2;//条数 var pageIndex = 2;//索引 var sql = @" SELECT D.* FROM ( SELECT ROW_N ...

  4. Entity Framework Code First执行SQL语句、视图及存储过程

    1.Entity Framework Code First查询视图 Entity Framework Code First目前还没有特别针对View操作的方法,但对于可更新的视图,可以采用与Table ...

  5. Entity Framework Core 执行SQL语句和存储过程

    无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求.在这篇文章中,我们介绍几种执行SQL的方法. 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构. public clas ...

  6. Entity Framework 在MySQL中执行SQL语句,关于参数问题

    在Entity Framework中添加MySQL模型,在写代码的过程中需要直接执行SQL语句. 在SQL语句中用到了@curRank := 0 这样在SQL语句中定义参数,同时还会有传入参数:ai. ...

  7. Entity Framework中执行Sql语句

           如果想在EF框架中执行Sql语句,其实很简单,EF里面已经提供了相关的方法(此处使用的EF为EF4.1版本).        EF中提供了两个方法,一个是执行查询的Sql语句SqlQue ...

  8. 4.5 .net core下直接执行SQL语句并生成DataTable

    .net core可以执行SQL语句,但是只能生成强类型的返回结果.例如var blogs = context.Blogs.FromSql("SELECT * FROM dbo.Blogs& ...

  9. .net core下直接执行SQL语句并生成DataTable

    .net core可以执行SQL语句,但是只能生成强类型的返回结果.例如var blogs = context.Blogs.FromSql("SELECT * FROM dbo.Blogs& ...

随机推荐

  1. Tomcat配置连接池的java实现

    1.准备 JNDI(Java Naming and Directory Interface),Java命名和目录接口.JNDI的作用就是:在服务器上配置资源,然后通过统一的方式来获取配置的资源.我们这 ...

  2. thinkjs crud练习

    今天看了下thinkjs(v2.1.7),做了一个简单的入门demo,基于mysql数据库增删改查,详细源码如下: 页面整体展示: 会员新增: 删除: 查询: 主页面: <!DOCTYPE ht ...

  3. MongoDB 线上环境按照及配置(授权方式启动)

    1创建文件repo文件 #vim /etc/yum.repos.d/mongodb-org-3.4.repo [mongodb-org-3.4] name=MongoDB Repository bas ...

  4. 二:Nexus知识

    Nexus访问 Http://localhost:8080/nexus Nexus登陆 用户:admin 密码:admin123 Nexus仓库 nexus的仓库类型分为以下四种: group: 仓库 ...

  5. 三、Bean的初始化

    一.使用构造器实例化Bean:这是最简单的方式,Spring IOC容器既能使用默认空构造器也能使用有参构造器两种方式创建bean 空构造器 <bean name="bean1&quo ...

  6. 牛顿迭代,多项式求逆,除法,开方,exp,ln,求幂

    牛顿迭代 若 \[G(F_0(x))\equiv 0(mod\ x^{2^t})\] 牛顿迭代 \[F(x)\equiv F_0(x)-\frac{G(F_0(x))}{G'(F_0(x))}(mod ...

  7. webapp 的简单开发

    web app 的技术平台很多,如adobe phonegap.sencha touch.appcan(国产).dcloud(国产)平台.我选择了dcloud平台,原因:简单,容易上手. web ap ...

  8. webpack简单学习的入门教程

    前言,如果按照官网的安装办法: npm install webpack -g 安装的是最新版的,然后就莫名其妙的有问题(可以安装,但运行有问题).我是小白,我也不知道具体原因,所以我换成2.5.1版本 ...

  9. 用 State Pattern 来实现一个简单的 状态机

    首先要理解 State Pattern 模式. http://www.dofactory.com/net/state-design-pattern Definition Allow an object ...

  10. 用C语言指针作为函数返回值

    转载:http://c.biancheng.net/cpp/html/3242.html C语言允许函数的返回值是一个指针(地址),我们将这样的函数称为指针函数.下面的例子定义了一个函数 strlon ...