Dapper-据说stackoverflow使用的orm

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Dapper;

namespace DapperTest
{
    class Program
    {
        static void Main(string[] args)
        {
            IDbConnection conn = new SqlConnection("Server=.;Database=Dapper;Uid=sa;Pwd=******;");

            //Book book = new Book();
            //book.Name = "C#本质论";
            //string query = "INSERT INTO Book(Name)VALUES(@name)";
            ////对对象进行操作
            //conn.Execute(query, book);
            ////直接赋值操作
            //conn.Execute(query, new { name = "C#本质论" });

            //string query = "UPDATE Book SET  [email protected] WHERE id [email protected]";
            //conn.Execute(query, new{name="C# VS Java",id=3});

            //Book book = new Book() { Id = 3 };
            //string query = "DELETE FROM Book WHERE id = @id";
            //conn.Execute(query, book);
            //conn.Execute(query, new { id = 5 });

            //string query = "SELECT * FROM Book";
            ////无参数查询,返回列表,带参数查询和之前的参数赋值法相同。
            //var l= conn.Query<Book>(query).ToList();

            //返回单条信息
            //string query = "SELECT * FROM Book WHERE id = @id";
            //var book = conn.Query<Book>(query, new { id = 8 }).SingleOrDefault();

            //查询图书时,同时查找对应的书评,并存在List中。实现1--n的查询操作
            //string query = "SELECT * FROM Book b LEFT JOIN BookReview br ON br.BookId = b.Id WHERE b.id = @id";
            //Book lookup = null;
            ////Query<TFirst, TSecond, TReturn>
            //var b = conn.Query<Book, BookReview, Book>(query,
            // (book, bookReview) =>
            // {
            //     //扫描第一条记录,判断非空和非重复
            //     if (lookup == null || lookup.Id != book.Id)
            //         lookup = book;
            //     //书对应的书评非空,加入当前书的书评List中,最后把重复的书去掉。
            //     if (bookReview != null)
            //         lookup.Reviews.Add(bookReview);
            //     return lookup;
            // }, new { id = 8 }).Distinct().SingleOrDefault();

            //1--1操作
            //BookReview br;
            //string query = "SELECT * FROM BookReview br LEFT JOIN Book b ON br.BookId = b.Id WHERE br.id = @id";
            //using (conn)
            //{
            //    br = conn.Query<BookReview, Book, BookReview>(query,
            //   (bookReview, book) =>
            //   {
            //       bookReview.AssoicationWithBook = book;
            //       return bookReview;
            //   }, new { id = 4 }).SingleOrDefault();

            //}

            if (conn.State == ConnectionState.Closed)
            {
                conn.Open();
            }
            using (conn)
            {
                //开始事务
                IDbTransaction transaction = conn.BeginTransaction();
                try
                {
                    string query = "delete from book where id = @id";
                    string query2 = "delete from BookReview where BookId = @BookId";
                    conn.Execute(query2, new { BookId = 7 }, transaction, null, null);
                    conn.Execute(query, new { id = 7 }, transaction, null, null);
                    //提交事务
                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    //出现异常,事务Rollback
                    transaction.Rollback();
                    throw new Exception(ex.Message);
                }
            }

            Console.WriteLine("Ok");
            Console.ReadKey();
        }
    }

    public class Book
    {
        public Book()
        {
            Reviews = new List<BookReview>();
        }
        public int Id { get; set; }
        public string Name { get; set; }
        public virtual List<BookReview> Reviews { get; set; }
        public override string ToString()
        {
            return string.Format("[{0}]------《{1}》", Id, Name);
        }
    }

    public class BookReview
    {
        public int Id { get; set; }
        public int BookId { get; set; }
        public virtual string Content { get; set; }
        public virtual Book AssoicationWithBook { get; set; }
        public override string ToString()
        {
            return string.Format("{0})--[{1}]\t\"{3}\"", Id, BookId, Content);
        }
    }

    /*
     * USE [Dapper]
     *
        SET ANSI_NULLS ON
        GO
        SET QUOTED_IDENTIFIER ON
        GO
        CREATE TABLE [dbo].[BookReview](
	        [Id] [int] IDENTITY(1,1) NOT NULL,
	        [BookId] [int] NOT NULL,
	        [Content] [nvarchar](500) NOT NULL,
         CONSTRAINT [PK_BookReview] PRIMARY KEY CLUSTERED
        (
	        [Id] ASC
        )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
        ) ON [PRIMARY]
        GO

        SET ANSI_NULLS ON
        GO
        SET QUOTED_IDENTIFIER ON
        GO
        CREATE TABLE [dbo].[Book](
	        [Id] [int] IDENTITY(1,1) NOT NULL,
	        [Name] [nvarchar](10) NOT NULL,
         CONSTRAINT [PK_Book] PRIMARY KEY CLUSTERED
        (
	        [Id] ASC
        )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
        ) ON [PRIMARY]
        GO
        SET IDENTITY_INSERT [dbo].[Book] ON
        INSERT [dbo].[Book] ([Id], [Name]) VALUES (6, N‘C#本质论1‘)
        INSERT [dbo].[Book] ([Id], [Name]) VALUES (9, N‘C#本质论4‘)
        SET IDENTITY_INSERT [dbo].[Book] OFF

     */
}

  

时间: 2024-11-01 20:45:09

Dapper-据说stackoverflow使用的orm的相关文章

利用Dapper ORM搭建三层架构

利用Dapper关系对象映射器写的简单的三层架构.Dapper:StackOverFlow在使用的一个微型的ORM,框架整体效率较高,轻量级的ORM框架.网上有较多的扩展.此处只是简单的调用Dapper中的方法.UI层:Dapper.Console:一个简单的控制台程序.BLL业务逻辑层:Dapper.IBLL:业务逻辑层的抽象接口.Dapper.BLL:业务逻辑层的具体实现.(会根据配置文件的不同调用不同的DAL层)DAL数据访问层:Dapper.IDAL:数据访问层的抽象接口.利于程序的扩展

ASP .Net Core 使用 Dapper 轻型ORM框架

一:优势 1,Dapper是一个轻型的ORM类.代码就一个SqlMapper.cs文件,编译后就40K的一个很小的Dll. 2,Dapper很快.Dapper的速度接近与IDataReader,取列表的数据超过了DataTable. 3,Dapper支持什么数据库.Dapper支持Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的数据库,当然如果你知道原理也可以让它支持Mongo db 4,Dapper的r支持多表并联的对象.支持一对多 多对多的关系.并且

给力分享新的ORM =&gt; Dapper( 转)

出处:http://www.cnblogs.com/sunjie9606/archive/2011/09/16/2178897.html 最近一直很痛苦,想选一个好点的ORM来做项目,实在没遇到好的.昨天忽然的看到Dapper,立刻迷恋上了.这个ORM实在太强大了,可惜资料少的可怜.就发点资料来介绍吧.官方资料点击这里 Dapper是一个轻型的ORM类.代码就一个SqlMapper.cs文件.文件见下.编译后就40K的一个很小的Dll.(估计其他的ORM要哭了.) Dapper很快,有多快.实验

Dapper.NET——轻量ORM

Dapper.NET使用 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Dapper(4.0)为例. 2.1 在数据库中建立几张表. 2.2实体类. 3.使用方法 3.1  一对一映射 3.2 一对多映射 3.3 插入实体 3.4 执行存储过程 Dapper是一款轻量级ORM工具(Github).如果你在小的项目中,使用Entity Framework.NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀.你又觉得ORM省时省力,这时Dapper 将是你不

Dapper.NET——轻量ORM(转载)

Dapper.NET使用 本文目录 Dapper.NET使用 1.为什么选择Dapper 2.以Dapper(4.0)为例. 2.1 在数据库中建立几张表. 2.2实体类. 3.使用方法 3.1  一对一映射 3.2 一对多映射 3.3 插入实体 3.4 执行存储过程 Dapper是一款轻量级ORM工具(Github).如果你在小的项目中,使用Entity Framework.NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀.你又觉得ORM省时省力,这时Dapper 将是你不

Dapper ORM 用法

假如你喜欢原生的Sql语句,又喜欢ORM的简单,那你一定会喜欢上Dapper这款ROM.Dapper的优势:1,Dapper是一个轻型的ORM类.代码就一个SqlMapper.cs文件,编译后就40K的一个很小的Dll.2,Dapper很快.Dapper的速度接近与IDataReader,取列表的数据超过了DataTable.3,Dapper支持什么数据库.Dapper支持Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的数据库,当然如果你知道原理也可以让

Dapper小型ORM的使用(随便吐槽下公司)

近来公司又有新项目要做,之前做项目用过蛮多ORM,包括ef,NetTiers,ServiceStack.OrmLite等ROM,每种ORM都有一定的坑(或者说是使用者的问题吧~~).用来用去都觉的有一定的不爽.这次打算用Dapper这个ORM来做项目看看.首先感谢http://www.cnblogs.com/wywnet/p/33422150.html这位老兄给出的文章还有demo(建议大家可以看看),看了后深受启发.所以也确定用Dapper来练练手.好了,先介绍下Dapper这个ORM 1,D

轻型的ORM类Dapper

Dapper是一个轻型的ORM类.代码就一个SqlMapper.cs文件,主要是IDbConnection的扩展方法,编译后就40K的一个很小的dll.官方站点http://code.google.com/p/dapper-dot-net/ ,也可以通过Nuget进行安装 Dapper很快.Dapper的速度接近与IDataReader. Dapper支持主流数据库 Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的数据库 支持多表并联的对象.支持一对多

使用轻量级ORM Dapper进行增删改查

  项目背景 前一段时间,开始做一个项目,在考虑数据访问层是考虑技术选型,考虑过原始的ADO.NET.微软的EF.NH等.再跟经理讨论后,经理强调不要用Ef,NH做ORM,后期的sql优化不好做,公司也没有人对EF,Nh 等orm优化比较熟悉的.强调说的,我们的项目要做的得简单,可以使用ADO.NET 写原始的sql.但我自己还是喜欢ORM的,它可以提高数据访问层的开发.有一天,在订阅张善友 doNet跨平台微信公众号里,看到Dapper的推荐.了解之后,我自己喜欢喜欢Dapper,可以满足我这