EF ExecuteSqlCommand SqlQuery ji'ben基本用法

#region 01-封装增删改或其他的方法
        /// <summary>
        /// 封装增删改或其他的方法
        /// </summary>
        /// <param name="db">数据库连接上下文</param>
        /// <param name="sql">数据库sql语句</param>
        /// <param name="paras">参数化参数</param>
        /// <returns></returns>
        public static int ExecuteSqlCommand(DbContext db, string sql, params SqlParameter[] paras)
        {
            return db.Database.ExecuteSqlCommand(sql, paras);
        }
        #endregion

        #region 02-执行查询操作(结果为集合)

        public static List<T> SqlQueryList<T>(DbContext db, string sql, params SqlParameter[] paras)
        {
            return db.Database.SqlQuery<T>(sql, paras).ToList();
        }
        #endregion

        #region 03-执行查询操作(结果为单一实体)

        public static T SqlQuery<T>(DbContext db, string sql, params SqlParameter[] paras)
        {
            return db.Database.SqlQuery<T>(sql, paras).FirstOrDefault();
        }
        #endregion

1

2

3

4

5

using (var context = new MyDBContext())

{

     var userSuppliedAuthor = new SqlParameter("@author", "Adi");

     context.Database.ExecuteSqlCommand("SELECT * FROM dbo.Posts WHERE Author = @author", userSuppliedAuthor);

}

 这样是防止SQL注入,这种EF 执行SQL的性能比原生高

                var list = db.ZQ_TestEF.SqlQuery("select * from ZQ_TestEF").ToList();      // ZQ_TestEF 是类,不是表
                IList<ZQ_TestEF> list2 = db.ZQ_TestEF.SqlQuery("select * from dbo.ZQ_TestEF").ToList();

以下则是一个使用JOIN连接查询的具体实例。

假如有Posts,Category,Posts_Category这三张表。Posts_Category是Post表中Post Id列以及Category表中Category Id列的映射表。如果我们执行如下的JOIN连接SQL查询:

这种写法,会生成实体类

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

internal class MappingData

{

  public string CategoryTitle { get; set; }

  public string PostTitle { get; set; }

  public long? MappingId { get; set; }

}

using (var context = new MyDBContext())

{

var userSuppliedId = new SqlParameter("@PostId", PostID);

string sqlQuery = @"select c.Name CategoryTitle, pcm.Id MappingId, p.Title PostTitle from Posts_Categories pcm

                                join Categories c on pcm.CategoryId = c.Id

                                join Posts p on pcm.PostId = p.Id where pcm.PostId =@PostId";

var Results = db.Database.SqlQuery<MappingData>(sqlQuery,userSuppliedId).ToList();

发布了89 篇原创文章 · 获赞 4 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/m0_37879526/article/details/103956815
EF