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. FTPS Firewall

    989 for the FTPS data channel implicit FTPS was expected to listen on the IANA Well Known Port 990/T ...

  2. golang中的make与new

    golang 中有两个内存分配机制 :new和make,二者有明显区别. new:new(T)分配了零值填充的T类型的内存空间,并且返回其地址,即一个*T类型的值.其自身是一个指针.可用于初始化任何类 ...

  3. Spring_Spring与IoC_第一个程序

    一.IoC IoC是一种概念,是一种思想,指将传统上由程序代码直接操控的对象调用权交给容器,通过容器来实现对象的装配和管理.控制反转是对对象控制权的转移,从程序代码本身反转到外部容器. 当前IoC比较 ...

  4. flask路由末端带斜线和不带斜线的区别

    路由末端带有“/” app.route('/test/') 在浏览器中输入http://127.0.0.1:5000/test/ 和http://127.0.0.1:5000/test都能访问 路由末 ...

  5. svn 文件后面显示时间和提交人

    1.在eclipse中选择window-->preferences,然后选择下图中的位置,就可以显示你想要的东西的了,在此记下以备后用

  6. browserslist 目标浏览器配置表

    为什么需要: 根据提供的目标浏览器的环境来,智能添加css前缀,js的polyfill垫片,来兼容旧版本浏览器,而不是一股脑的添加.避免不必要的兼容代码,以提高代码的编译质量. 共享使用browser ...

  7. Windows下的代码注入

    木马和病毒的好坏很大程度上取决于它的隐蔽性,木马和病毒本质上也是在执行程序代码,如果采用独立进程的方式需要考虑隐藏进程否则很容易被发现,在编写这类程序的时候可以考虑将代码注入到其他进程中,借用其他进程 ...

  8. JavaScript AMD 与CMD的代码区别

    1:CMD 依赖就近 define(function(require,export) { var b =1; var a = require("../a"); a.dosometh ...

  9. csharp:DropDownComboxTreeView

    using System; using System.Collections.Generic; using System.Text; using System.Drawing; using Syste ...

  10. 11.1NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 100 + 50\) 实际得分:\(100 + 100 + 50\) 感觉老师找的题有点水呀. 上来看T1,woc?裸的等比数列求和?然而我不会公式呀..感觉要凉 ...