• Entity Framework——执行sql语句


    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", 322));
                }

    注意操作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", 323));
                }

    插入方法举例:

    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", 11), new MySqlParameter("@uid",22));
                }

    事务操作举例:

    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", 11), new MySqlParameter("@uid", 22));
                    tran.Commit();
                }
                catch
                {
                    tran.Rollback();
                }
                finally
                {
                    if (db != null) db.Dispose();
                    if (tran != null) tran.Dispose();
                }

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

    转载与引用请注明出处。

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

  • 相关阅读:
    ConcurrentHashMap之实现细节
    Java 开发 2.0: 用 Hadoop MapReduce 进行大数据分析
    mapreduce从wordcount开始
    centos 5.5 安装mysql 5.5 全程详细记录 RPM方式安装
    使用GDAL工具对OrbView3数据进行正射校正
    centos 5.5 mysql5.5 乱码
    netty vs mina netty和mina的区别
    VC欣赏、家人是阻力,极客化、国际化——90后创业生态
    悲惨而又丢人的创业经历:草根创业者含恨倾诉为什么失败
    悲惨而又丢人的创业经历:草根创业者含恨倾诉为什么失败
  • 原文地址:https://www.cnblogs.com/hdwgxz/p/7860119.html
Copyright © 2020-2023  润新知