ASP.NET Core 2.0系列学习笔记-ORM框架之Dapper

ORM框架之Dapper,项目测试环境:.NET Core2.0 ConsoleApp应用;

新建ConsoleApp应用(项目命名DapperApp),添加NuGet引用,如下图所示:


项目添加=》新建文件夹=》Model添加实体类:DETAILS和TB_TYPE,数据库对应表模型。

 public class DETAILS
 {
        public string Id { get; set; }

        public string Title { get; set; }

        public string Mark { get; set; }

        public string Content { get; set; }

        public DateTime Date { get; set; }

        public int ReadCount { get; set; }

        public string Writer { get; set; }

        public short TypeId { get; set; }

        public string PartContent { get; set; }

        public short SubId { get; set; }
 }
public class TB_TYPE
{
        public short Id { get; set; }
        public string TypeName { get; set; }
}

在Program的Main方法中添加测试:

using System;
using Dapper;
using System.Data;
using System.Data.SqlClient;
using DapperApp.Model;
using System.Collections.Generic;
using Newtonsoft.Json;
using System.Threading.Tasks;

namespace DapperApp
{
    class Program
    {
        private static string sqlconnStr = "Server=.;Database=Test;uid=sa;pwd=123456";

        static void Main(string[] args)
        {
            Console.WriteLine("Hello Dapper!");
            //Query();
            //QueryAsync();
            QueryJoin();
            //QueryInData();
            //QueryMultiTable();
            //QueryMultiTableAsync();

            //Insert();

            //Update();
            //UpdateKeyVal();

            //Delete();

            Proc();
        }

        /// <summary>
        /// T-SQL查询,返回单一数据集
        /// </summary>
        private static void Query()
        {
            using (var db = new SqlConnection(sqlconnStr))
            {
                string sql = "SELECT [ID],[TITLE],[MARK],[CONTENT],[DATE],[READCOUNT],[WRITER],[TYPEID],[PARTCONTENT],[SUBID] FROM [dbo].[TB_DETAILS]";
                var query = db.Query<DETAILS>(sql);
                foreach (var item in query)
                {
                    var str = $"{item.Id} {item.Title} {item.Mark} {item.Content} {item.Date} {item.ReadCount} {item.Writer} {item.TypeId} {item.PartContent} {item.SubId}";
                    Console.WriteLine(str);
                }
            }
        }

        /// <summary>
        ///  异步T-SQL查询,返回单一数据集
        /// </summary>
        /// <returns></returns>
        private async static Task QueryAsync()
        {
            using (var db = new SqlConnection(sqlconnStr))
            {
                string sql = "SELECT [ID],[TITLE],[MARK],[CONTENT],[DATE],[READCOUNT],[WRITER],[TYPEID],[PARTCONTENT],[SUBID] FROM [dbo].[TB_DETAILS]";
                var query = await db.QueryAsync<DETAILS>(sql);
                foreach (var item in query)
                {
                    var str = $"{item.Id} {item.Title} {item.Mark} {item.Content} {item.Date} {item.ReadCount} {item.Writer} {item.TypeId} {item.PartContent} {item.SubId}";
                    Console.WriteLine(str);
                }
            }
        }

        /// <summary>
        /// T-SQL-IN查询,返回单一数据集
        /// </summary>
        private static void QueryInData()
        {
            using (var db = new SqlConnection(sqlconnStr))
            {
                ///注意sql语句底层会包装T-SQL-IN语句
                string sql = "SELECT [TITLE],[MARK],[CONTENT],[DATE] FROM [dbo].[TB_DETAILS] WHERE [MARK] IN @MARK";
                ///匿名类参数
                var query = db.Query<DETAILS>(sql, new { mark = new string[3] { "李四测试", "李四测试2", "afd" } });
                foreach (var item in query)
                {
                    var str = $"{item.Title} {item.Mark} {item.Content} {item.Date}";
                    Console.WriteLine(str);
                }
            }
        }


        /// <summary>
        /// 多表查询,返回多数据集
        /// </summary>
        private static void QueryMultiTable()
        {
            using (var db = new SqlConnection(sqlconnStr))
            {
                ///多sql语句执行,返回多数据集
                string sql = "SELECT * FROM [dbo].[TB_DETAILS];SELECT * FROM [dbo].[TB_TYPE]";
                ///匿名类参数
                var queryMulti = db.QueryMultiple(sql);
                var details = queryMulti.Read<DETAILS>();
                var type = queryMulti.Read<TB_TYPE>();

                //处理键值对模型对象
                List<KeyValuePair<string, object>> list = new List<KeyValuePair<string, object>>();
                list.Add(new KeyValuePair<string, object>("details", details));
                list.Add(new KeyValuePair<string, object>("type", type));

                AjaxResult ajaxResult = new AjaxResult() { Code = "0", Msg = "OK", Data = list, Sum = list.Count };
                //string jsonStr = JsonConvert.SerializeObject(ajaxResult);
                Console.WriteLine($"{JsonConvert.SerializeObject(ajaxResult)}");
            }
        }

        /// <summary>
        /// 异步多表查询,返回多数据集
        /// </summary>
        private async static Task QueryMultiTableAsync()
        {
            using (var db = new SqlConnection(sqlconnStr))
            {
                ///多sql语句执行,返回多数据集
                string sql = "SELECT * FROM [dbo].[TB_DETAILS];SELECT * FROM [dbo].[TB_TYPE]";
                ///匿名类参数
                var queryMulti = await db.QueryMultipleAsync(sql);
                var details = queryMulti.ReadAsync<DETAILS>();
                var type = queryMulti.ReadAsync<TB_TYPE>();

                List<KeyValuePair<string, object>> list = new List<KeyValuePair<string, object>>();
                list.Add(new KeyValuePair<string, object>("details", details));
                list.Add(new KeyValuePair<string, object>("type", type));

                AjaxResult ajaxResult = new AjaxResult() { Code = "0", Msg = "OK", Data = list, Sum = list.Count };
                //string jsonStr = JsonConvert.SerializeObject(ajaxResult);
                Console.WriteLine($"{JsonConvert.SerializeObject(ajaxResult)}");
            }
        }


        /// <summary>
        /// T-SQL-JOIN语句
        /// </summary>
        private static void QueryJoin()
        {
            using (var db = new SqlConnection(sqlconnStr))
            {
                ///注意sql语句底层会包装T-SQL-JOIN语句
                string sql = "SELECT A.TITLE,A.MARK,A.[DATE],B.TYPENAME FROM [dbo].[TB_DETAILS] AS A JOIN [dbo].[TB_TYPE] AS B ON A.TYPEID = B.ID WHERE B.TYPENAME = '设计'";

                //DETAILS:实体模型,TB_TYPE:实体模型,DETAILS:返回实体模型
                var result = db.Query<DETAILS, TB_TYPE, DETAILS>(sql,(details,users) => {
                    //对应参数details-》DETAILS,users -》TB_TYPE
                    details.TypeId = users.Id;
                    return details; //返回DETAILS
                },splitOn:"TypeName"); //以TypeName分割

                AjaxResult ajaxResult = new AjaxResult() { Code = "0", Msg = "OK", Data = result, Sum = 0 };
                //string jsonStr = JsonConvert.SerializeObject(ajaxResult);
                Console.WriteLine($"{JsonConvert.SerializeObject(ajaxResult)}");
            }
        }
        

        /// <summary>
        /// 单语句sql添加操作。返回受影响行数
        /// </summary>
        private static void Insert()
        {
            using (var db = new SqlConnection(sqlconnStr))
            {
                string sql = "INSERT INTO [dbo].[TB_DETAILS](ID,TITLE,MARK) VALUES(@ID,@TITLE,@MARK)";
                ///匿名类模型
                int count = db.Execute(sql, new
                {
                    ID = "1a33ed8f501b475dac40cc5ecf728306",
                    TITLE = "Test",
                    MARK = "afd"
                });
                AjaxResult ajaxResult = new AjaxResult() { Code = "0", Msg = "OK", Data = count, Sum = count };
            }
        }

        /// <summary>
        /// 单条或多条数据添加
        /// </summary>
        private static void InsertBulk()
        {
            using (var db = new SqlConnection(sqlconnStr))
            {
                string sql = "INSERT INTO [dbo].[TB_DETAILS]([ID],[TITLE],[MARK],[CONTENT],[DATE],[READCOUNT],[WRITER],[TYPEID],[PARTCONTENT] ,[SUBID]) VALUES(@ID,@TITLE,@MARK,@CONTENT,@DATE,@READCOUNT,@WRITER,@TYPEID,@PARTCONTENT,@SUBID)";

                //实体类模型对象
                DETAILS details = new DETAILS()
                {
                    Id = "1a33ed8f501b475dac40cc5ecf728308",
                    Title = "Test",
                    Mark = "afd",
                    Content = "sf",
                    Date = DateTime.Now,
                    ReadCount = 3,
                    Writer = "zuzhe",
                    TypeId = 5,
                    PartContent = "sdfds",
                    SubId = 2
                };
                var c = db.Execute(sql,details); //单条数据添加

                List<DETAILS> list = new List<DETAILS>() {
                    new DETAILS{
                        Id = "1a33ed8f501b475dac40cc5ecf728309",
                        Title ="Test", Mark = "afd",
                        Content ="sf",
                        Date = DateTime.Now,
                        ReadCount = 3,
                        Writer = "zuzhe",
                        TypeId = 5,
                        PartContent = "sdfds",
                        SubId = 2
                    },
                    new DETAILS{
                        Id = "1a33ed8f501b475dac40cc5ecf728310",
                        Title ="Test", Mark = "afd",
                        Content ="sf",
                        Date = DateTime.Now,
                        ReadCount = 3,
                        Writer = "zuzhe",
                        TypeId = 5,
                        PartContent = "sdfds",
                        SubId = 2
                    },
                    new DETAILS{
                        Id = "1a33ed8f501b475dac40cc5ecf728311",
                        Title ="Test", Mark = "afd",
                        Content ="sf",
                        Date = DateTime.Now,
                        ReadCount = 3,
                        Writer = "zuzhe",
                        TypeId = 5,
                        PartContent = "sdfds",
                        SubId = 2
                    }
                };
                int count = db.Execute(sql, list); //多条数据添加
                AjaxResult ajaxResult = new AjaxResult() { Code = "0", Msg = "OK", Data = count, Sum = count };
            }
        }


        /// <summary>
        /// 单条语句更新
        /// </summary>
        private static void Update()
        {
            using (var db = new SqlConnection(sqlconnStr))
            {
                string sql = "UPDATE [dbo].[TB_DETAILS] SET [MARK] = @MARK WHERE [ID] = @ID";
                //匿名对象
                var count = db.Execute(sql, new {
                    MARK= "张三", //参数占位符映射
                    ID = "1a33ed8f501b475dac40cc5ecf728305"
                });

                AjaxResult ajaxResult = new AjaxResult() { Code = "0", Msg = "OK", Data = count, Sum = count };
            }
        }

        /// <summary>
        /// 键值对操作更新
        /// </summary>
        private static void UpdateKeyVal()
        {
            using (var db = new SqlConnection(sqlconnStr))
            {
                string sql = "UPDATE [dbo].[TB_DETAILS] SET [MARK] = @MARK WHERE [ID] = @ID";
                List<KeyValuePair<string, object>> keys = new List<KeyValuePair<string, object>>();
                keys.Add(new KeyValuePair<string, object>("@MARK","李四测试"));
                keys.Add(new KeyValuePair<string, object>("@ID", "1a33ed8f501b475dac40cc5ecf728305"));

                ///注意,键值对操作更新 会执行覆盖,以最后一组键值对更新

                //keys.Add(new KeyValuePair<string, object>("@MARK", "李四测试2"));
                //keys.Add(new KeyValuePair<string, object>("@ID", "1a33ed8f501b475dac40cc5ecf728306"));
                var count = db.Execute(sql, keys);

                AjaxResult ajaxResult = new AjaxResult() { Code = "0", Msg = "OK", Data = count, Sum = count };
            }
        }

        /// <summary>
        /// 删除操作
        /// </summary>
        private static void Delete()
        {
            using (var db = new SqlConnection(sqlconnStr))
            {
                string sql = "delete [dbo].[TB_DETAILS] where [ID] = @ID";
                ///匿名对象
                var count = db.Execute(sql,new { Id= "sdfsd" });
                AjaxResult ajaxResult = new AjaxResult() { Code = "0", Msg = "OK", Data = count, Sum = count };
            }
        }

        /// <summary>
        /// 存储过程操作
        /// </summary>
        private static void Proc()
        {
            using (var db = new SqlConnection(sqlconnStr))
            {
                string sql = "sp_details"; //存储过程名称
                ///匿名对象,使用存储过程时,查询显示指明存储过程操作
                var deails = db.Query<DETAILS>(sql,new { typeid = 2 },commandType: CommandType.StoredProcedure);

                AjaxResult ajaxResult = new AjaxResult() { Code = "0", Msg = "OK", Data = deails, Sum = 0 };
                //string jsonStr = JsonConvert.SerializeObject(ajaxResult);
                Console.WriteLine($"{JsonConvert.SerializeObject(ajaxResult)}");
            }
        }


        private static void Test()
        {
            using (var db = new SqlConnection(sqlconnStr))
            {
                //测试连接
            }
        }
    }

    public class AjaxResult
    {
        public string Code { get; set; }

        public string Msg { get; set; }

        public object Data { get; set; }

        public int Sum { get; set; }

    }
}
Dapper基本CRUD操作完毕,注:测试看jsonString控制台输出,请导入Newtonsoft.Json 序列化操作。



猜你喜欢

转载自blog.csdn.net/chaitsimplelove/article/details/79746886