Share a nice gray dapper extension: Rainbow

Original Link: http://www.cnblogs.com/DiscoverPalace/p/3420592.html

dapper is a very efficient orm framework, much more efficient than our Microsoft EF. It only has one class file, very small.(Microsoft has improved since EF 5.0)

ps; since I haven't tested it before, I've only seen the official data before, or I've actually learned it.Thank you here Doctor Deep Blue Correction by.But it's also a very good micro orm framework.

1, download dapper first Download here   .

2, Download Plugins Rainbow

In Package Manager Console Enter in

PM> Install-Package Dapper.Rainbow 

  

Preparations are complete. Below is demo.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
 
using Dapper;
 
// to have a play, install Dapper.Rainbow from nuget
 
namespace TestDapper
{
    class Program
    {
        // no decorations, base class, attributes, etc 
        class Product 
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public string Description { get; set; }
            public DateTime? LastPurchase { get; set; }
        }
 
        // container with all the tables 
        class MyDatabase : Database<MyDatabase>
        {
            public Table<Product> Products { get; set; }
        }
 
        static void Main(string[] args)
        {
            var cnn = new SqlConnection("Data Source=.;Initial Catalog=tempdb;Integrated Security=True");
            cnn.Open();
 
            var db = MyDatabase.Init(cnn, commandTimeout: 2);
 
            try
            {
                db.Execute("waitfor delay '00:00:03'");
            }
            catch (Exception)
            {
                Console.WriteLine("yeah ... it timed out");
            }
 
 
            db.Execute("if object_id('Products') is not null drop table Products");
            db.Execute(@"create table Products (
                    Id int identity(1,1) primary key, 
                    Name varchar(20), 
                    Description varchar(max), 
                    LastPurchase datetime)");
 
            int? productId = db.Products.Insert(new {Name="Hello", Description="Nothing" });
            var product = db.Products.Get((int)productId);
 
            product.Description = "untracked change";
 
            // snapshotter tracks which fields change on the object 
            var s = Snapshotter.Start(product);
            product.LastPurchase = DateTime.UtcNow;
            product.Name += " World";
            
            // run: update Products set LastPurchase = @utcNow, Name = @name where Id = @id
            // note, this does not touch untracked columns 
            db.Products.Update(product.Id, s.Diff());
 
            // reload
            product = db.Products.Get(product.Id);
            
 
            Console.WriteLine("id: {0} name: {1} desc: {2} last {3}", product.Id, product.Name, product.Description, product.LastPurchase);
            // id: 1 name: Hello World desc: Nothing last 12/01/2012 5:49:34 AM
 
            Console.WriteLine("deleted: {0}", db.Products.Delete(product.Id));
            // deleted: True 
 
 
            Console.ReadKey();
        }
    }
}

  

 

The MyDatabase above implements the same mechanism as EF. With this equivalent to EF context, it is much more convenient. Once you get this context, you can directly operate all tables, which is convenient for unified management. It's cool to use..

 

  

Reprinted at: https://www.cnblogs.com/DiscoverPalace/p/3420592.html

Keywords: Database

Added by V_dirt_God on Tue, 30 Jul 2019 21:19:59 +0300