zoukankan      html  css  js  c++  java
  • Dapper试用

    以下代码摘自imfunny的<给力分享新的ORM => Dapper> http://www.cnblogs.com/imfunny/archive/2011/09/16/2178829.html
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.SqlClient;
    using System.Data;
    using Dapper;
    namespace ConsoleApplication1
    {
        class Program
        {
            public static readonly string sqlconnectionString = "Data Source=localhost;Initial Catalog=Test;User Id=admindsl;Password=a4w8c3k5;";
            static void Main(string[] args)
            {
                SqlConnection connection = GetOpenConnection(sqlconnectionString);
                //插入100000条数据到数据库
                //for (int i = 0; i < 100000; i++)
                //{
                //    connection.Execute("INSERT INTO dog (Age,Name,Weight) VALUES (@age,@name,@Weight)",
                //      new { @age = i, @name = Guid.NewGuid().ToString(), @Weight = i });//System.Guid.NewGuid().ToString()全球唯一标识符 (GUID) 是一个字母数字标识符,用于指示产品的唯一性安装。
                //}
    
                //获取单条记录
                //var edog = connection.Query<Dog>("select * from dog where id = @Id", new { Id = 2 }).Single<Dog>();
                var edog = connection.Query<Dog>("select * from dog where id = @Id", new { Id = 3 }).SingleOrDefault<Dog>();
                Console.WriteLine("{0} : {1}", edog.Name, edog.Id);
                Console.WriteLine();
    
                //获取前十条记录
                IList<Dog> dogs = connection.Query<Dog>("select * from dog where id <= 10", null).ToList();
                foreach (Dog dg in dogs)
                {
                    Console.WriteLine("{0} : {1}", dg.Name, dg.Id);
                }
    
    
                Console.Read();
            }
            public static SqlConnection GetOpenConnection(string x)
            {
                SqlConnection connection = new SqlConnection(x);
                connection.Open();
                return connection;
            }
        }
        public class Dog
        {
            public int Age { get; set; }
    
            public int Id { get; set; }
    
            public string Name { get; set; }
    
            public int Weight { get; set; }
    
            public int IgnoredProperty
            {
                get
                {
                    return 1;
                }
            }
    
        }
    
    }

    Dapper保持目前的API,保持精确的定位是非常正确, 非常必须的.否则又是一个大而全的重型机器,失去它的优势.
    如Connection, Transaction不由Dapper内部管理, 这个定位真是太绝了

     

    想写linq的话使用这个扩展。地址这里http://sqlinq.codeplex.com/
    SQLinq.Dapper
    语法如下。

    IEnumerable<Person> data = null;
    using(IDbConnection con = GetDbConnection())
    {
        con.Open();
        data = con.Query(
            from p in SQLinq<Person>()
            where p.FirstName.StartsWith("C") && p.Age > 21
            orderby p.FirstName
            select p
        );
        con.Close();
    }

    单表的映射是这样的Query<Dog>(sqlquery,parmar);
    多表的是这样Query<Dog,Content,Dog>(sqlquery,(Content,Dog) => Dog.dd = Content.id,。。。。);

     

    更加简化的事务机制

    ar trans = conn.BeginTransaction(); 
                  conn.Execute(query, info);
                  trans.Commit();

    数据库的关闭

    const string query = "DELETE FROM `ex_admin` WHERE adminid = {0};";
               using (var conn = Database.DbService())
               {
                   conn.Execute(string.Format(query, adminid), null);
               }

    测试速度代码一

    private void TestDapper()
    {
        StringBuilder strSql = new StringBuilder();
        strSql.Append("SELECT EmployeeID,EmployeeNO,EmployeeName,DepartmentID,LoginNo,LoginPWD,IsLogin,GroupID,IsDeleted,Operator,InputDate,EditDate ");
        strSql.Append("FROM Employee ");
        IList<EmployeeInfo> list;
        IDbConnection conn = new SqlConnection(connectionString);
     
        conn.Open();
        sw.Reset();
        sw.Start();
        list = conn.Query<EmployeeInfo>(strSql.ToString(), null).ToList();
        conn.Close();
        sw.Stop();
     
        MessageBox.Show(list.Count.ToString());
    }
     
    private void TestPeta()
    {
        StringBuilder strSql = new StringBuilder();
        strSql.Append("SELECT EmployeeID,EmployeeNO,EmployeeName,DepartmentID,LoginNo,LoginPWD,IsLogin,GroupID,IsDeleted,Operator,InputDate,EditDate ");
        strSql.Append("FROM Employee ");
        PetaPoco.Database mcc = new PetaPoco.Database(connectionString, "System.Data.SqlClient");
        sw.Reset();
        sw.Start();
        IList<EmployeeInfo> list = mcc.Query<EmployeeInfo>(strSql.ToString(), null).ToList();
        sw.Stop();
        MessageBox.Show(list.Count.ToString());
     
    }
  • 相关阅读:
    空格转换
    vuex学习
    css移动端适配方法
    数组以及数组常用方法
    21-canvas事件监听
    20-canvas之形变
    [转]session 跨域共享方案
    [转载] 从mysql,代码,服务器三个方面看mysql性能优化
    [计算机]Alan Perlis人物简介
    Python环境搭建及pip的使用
  • 原文地址:https://www.cnblogs.com/laxknight/p/3381711.html
Copyright © 2011-2022 走看看