Dapper

using Dapper;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    /// <summary>
    /// Dapper1.60.0.0;.net framework4.5.2
    /// </summary>
    public partial class _Default : Page
    {
        private static string conn = System.Configuration.ConfigurationManager.ConnectionStrings["SAPConnection"].ToString();

        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Unnamed1_Click(object sender, EventArgs e)
        {
            using (IDbConnection connection = new SqlConnection(conn))
            {
                ////insert one
                //var insert = connection.Execute("Insert into AUsers values (@UserName, @Email, @Address)",
                //                  new { UserName = "jack", Email = "380234234@qq.com", Address = "上海" });

                ////insert batch 1
                //var usersList = Enumerable.Range(0, 10).Select(i => new Users()//新建一个User 类;返回user数组
                //{
                //    Email = i + "qq.com",
                //    Address = "N安徽",
                //    UserName = i + "jack"
                //});
                //var insertbul = connection.Execute("Insert into aUsers values (@UserName, @Email, @Address)", usersList);

                ////insert batch 2
                //var nusersList = Enumerable.Range(0, 10).Select(i => new //新建一个匿名类;返回匿名数组
                //{
                //    Email = i + "qq.com",
                //    Address = "Nss",
                //    UserName = i + "jack"
                //});
                //var ninsertbul = connection.Execute("Insert into aUsers values (@UserName, @Email, @Address)", nusersList);

                ////query单个
                //var query = connection.Query<Users>("select * from aUsers where UserName=@UserName", new { UserName = "jack" });//connection.Query("select * from aUsers where UserName=@UserName", new { UserName = "jack" }).toList();


                ////update 1
                //var update = connection.Execute("update ausers set username='qwe' where username=@username", new { username = "jack" });
                ////update batch
                //var updateb = connection.Execute("update ausers set username=@username where userid=@userid",new[]{ new {userid=47, username = "jack47" }, new {userid=48, username="jack48" } });

                ////delete single
                //var delete = connection.Execute("delete from ausers where username=@username", new { username = "jack9" });
                ////delete batch
                //var deletebul = connection.Execute("delete from ausers where username=@username", new[] { new{ username = "jack9" }, new { username = "jack8" } });

                ////stored procedure
                //var sp = "A_users";
                //string gg = "4jack";
                //List<Users> lsp= connection.Query<Users>(sp, new { username = gg,userid=47 },commandType:CommandType.StoredProcedure).AsList();

                ////select in
                //List<Users> sin = connection.Query<Users>("select * from ausers where userid in @id and username like @name",
                //    new { id=new int[] {36,37,38 },
                //    name="%jack"}).AsList();

                ////mutiple select
                var msql = "select * from ausers where userid=38;select * from ausers where userid=37";
                var re = connection.QueryMultiple(msql);
                List<Users> mre = re.Read<Users>().ToList();
                mre.AddRange(re.Read<Users>().ToList());

                ////dynamic params to stored procedure
                //var sp1 = "A_users";
                //DynamicParameters parameter = new DynamicParameters();

                //parameter.Add("@userid", 47, DbType.Int32, ParameterDirection.Input);
                //parameter.Add("@username", "ggg", DbType.String, ParameterDirection.Input);
                //parameter.Add("@RowCount",dbType: DbType.Int32, direction: ParameterDirection.Output);

                //connection.Execute(sp1,
                //    parameter,
                //    commandType: CommandType.StoredProcedure);

                //int rowCount = parameter.Get<int>("@RowCount");

                //结果映射,子集型
                var sql = "select * from Ausers as a inner join auserbooks as b on a.userid=b.userid";
                var UbookDict = new Dictionary<int, Users>();
                var userbooks = connection.Query<Users, UserBook, Users>(
                    sql, (users, userbook) => {
                        Users userEntry;
                        if (!UbookDict.TryGetValue(users.Userid, out userEntry)) {//可添加逻辑
                            userEntry = users;
                            userEntry.books = new List<UserBook>();//也可在类实例化
                            UbookDict.Add(userEntry.Userid, userEntry);
                        }
                        userEntry.books.Add(userbook);
                        return userEntry;
                    },
                    splitOn: "userid")//按照userid分组
                    .Distinct().ToList();
                //原生sql型
                var sql1 = "select * from Ausers as a right join auserbooks as b on a.userid=b.userid";
                var userbooks1 = connection.Query<Users, UserBook, Users>(sql1, (u, b) => { u.books = new List<UserBook>(); u.books.Add(b); return u; }, splitOn: "userid").Distinct().ToList();

                //mutiple join,子集型
                var sql2 = "select * from Ausers as a inner join auserbooks as b on a.userid=b.userid inner join abooks as c on b.bookid=c.bookid";
                var UbookDict2 = new Dictionary<int, Users>();
                var userbooks2 = connection.Query<Users, UserBook, BookDetail, Users>(
                    sql2, (users, userbook, bookdetail) => {
                        Users userEntry; UserBook bookEntry;
                        if (!UbookDict2.TryGetValue(users.Userid, out userEntry))
                        {//可添加逻辑
                            userEntry = users;
                            userEntry.books = new List<UserBook>();//也可在类实例化
                            UbookDict2.Add(users.Userid, users);
                        }
                        bookEntry = userbook;
                        bookEntry.bookDetail = bookdetail;
                        userEntry.books.Add(bookEntry);
                        return userEntry;
                    },
                    splitOn: "bookid")//按照最后一组关系的映射分组
                    .Distinct().ToList();
                //多join原生sql型
                var userbooks3 = connection.Query<Users, UserBook, BookDetail, Users>(
                    sql2, (users, userbook, bookdetail) => {userbook.bookDetail = bookdetail; users.books = new List<UserBook>(); users.books.Add(userbook);return users; },splitOn:"bookId").Distinct().ToList();

                GridView1.DataSource = userbooks2;
                GridView1.DataBind();
            }
        }

}
    //object
    #region
    internal class BookDetail
    {
        public BookDetail()
        {
        }
        public int bookid { get; set; }
        public string bookname { get; set; }

    }
   
    internal class UserBook
    {
        public UserBook()
        {
        }

        public int Userid { get; set; }//与表字段对应
        public int bookid { get; set; }
        public BookDetail bookDetail { get; set; }

    }

    internal class Users
    {

        public List<UserBook> books;
        public Users()
        {
            //books = new List<UserBook>();
        }
        public int Userid { get; set; }
        public string Address { get; set; }
        public string Email { get; set; }
        public string UserName { get; set; }
    }
    #endregion

    ////table definition relationship
    #region
    ////AUsers
    //CREATE TABLE[dbo].[AUsers] (
    //[UserID]
    //INT IDENTITY(1, 1) NOT NULL,
    //[UserName] VARCHAR(50)  NULL,
    //[Email]    VARCHAR(100) NULL,
    //[Address]  VARCHAR(100) NULL,
    //CONSTRAINT[PK_Users] PRIMARY KEY CLUSTERED([UserID] ASC)
    //);
    ////Abooks
    //CREATE TABLE[dbo].[ABooks] (
    //    [BookId]
    //    INT NOT NULL,
    //    [bookname] VARCHAR(20) NOT NULL,
    //   PRIMARY KEY CLUSTERED([BookId] ASC)
    //);
    ////auserbooks
    //CREATE TABLE[dbo].[AUserBooks] (
    //[UserId]
    //INT NOT NULL,
    //[BookId]
    //INT NOT NULL,
    //PRIMARY KEY CLUSTERED([UserId] ASC, [BookId] ASC),
    //CONSTRAINT[fk_ubk] FOREIGN KEY([UserId]) REFERENCES[dbo].[AUsers] ([UserID]) ON DELETE CASCADE,
    //FOREIGN KEY([BookId]) REFERENCES[dbo].[ABooks] ([BookId])
    //);
    #endregion
}

posted @ 2020-04-23 11:19  卢惠  阅读(84)  评论(0编辑  收藏  举报