日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

Dapper.NET——轻量ORM

發布時間:2025/3/15 asp.net 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 將是你不二的選擇。

1、為什么選擇Dapper

  • 輕量。只有一個文件(SqlMapper.cs),編譯完成之后只有120k(好象是變胖了)
  • 速度快。Dapper的速度接近與IDataReader,取列表的數據超過了DataTable。
  • 支持多種數據庫。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server
  • 可以映射一對一,一對多,多對多等多種關系。
  • 性能高。通過Emit反射IDataReader的序列隊列,來快速的得到和產生對象,性能不錯。
  • 支持FrameWork2.0,3.0,3.5,4.0,4.5
  • 2、以Dapper(4.0)為例。

    2.1 在數據庫中建立幾張表。

    CREATE TABLE [dbo].[CICUser] ([UserId] [int] IDENTITY(1, 1) PRIMARY KEY NOT NULL,[Username] [nvarchar](256) NOT NULL,[PasswordHash] [nvarchar](500) NULL,[Email] [nvarchar](256) NULL,[PhoneNumber] [nvarchar](30) NULL,[IsFirstTimeLogin] [bit] DEFAULT(1) NOT NULL,[AccessFailedCount] [int] DEFAULT(0) NOT NULL,[CreationDate] [datetime] DEFAULT(GETDATE()) NOT NULL,[IsActive] [bit] DEFAULT(1) NOT NULL )CREATE TABLE [dbo].[CICRole] ([RoleId] [int] IDENTITY(1, 1) PRIMARY KEY NOT NULL,[RoleName] [nvarchar](256) NOT NULL, )CREATE TABLE [dbo].[CICUserRole] ([Id] [int] IDENTITY(1, 1) PRIMARY KEY NOT NULL,[UserId] [int] FOREIGN KEY REFERENCES [dbo].[CICUser] ([UserId]) NOT NULL,[RoleId] [int] FOREIGN KEY REFERENCES [dbo].[CICRole] ([RoleId]) NOT NULL )

    2.2實體類。

    在創建實體類時,屬性名稱一定要與數據庫字段一一對應。

    public class User{public User(){Role = new List<Role>();}public int UserId { get; set; }public string UserName { get; set; } public string Password { get; set; }public string Email { get; set; }public string PhoneNumber { get; set; }public bool IsFirstTimeLogin { get; set; }public int AccessFailedCount { get; set; }public DateTime CreationDate { get; set; }public bool IsActive { get; set; }public List<Role> Role { get; set; }}public class Role{public int RoleId { get; set; }public string RoleName { get; set; }}public class Customer{public int UserId { get; set; }public string UserName { get; set; } public string Password { get; set; }public string Email { get; set; }public string PhoneNumber { get; set; }public bool IsFirstTimeLogin { get; set; }public int AccessFailedCount { get; set; }public DateTime CreationDate { get; set; }public bool IsActive { get; set; }public Role Role { get; set; }}

    ?

    3.使用方法

    3.1 ?一對一映射

    private static void OneToOne(string sqlConnectionString){List<Customer> userList = new List<Customer>();using (IDbConnection conn = GetSqlConnection(sqlConnectionString)){string sqlCommandText = @"SELECT c.UserId,c.Username AS UserName, c.PasswordHash AS [Password],c.Email,c.PhoneNumber,c.IsFirstTimeLogin,c.AccessFailedCount, c.CreationDate,c.IsActive,r.RoleId,r.RoleName FROM dbo.CICUser c WITH(NOLOCK) INNER JOIN CICUserRole cr ON cr.UserId = c.UserId INNER JOIN CICRole r ON r.RoleId = cr.RoleId";userList = conn.Query<Customer, Role, Customer>(sqlCommandText, (user, role) => { user.Role = role; return user; },null,null,true, "RoleId", null,null).ToList();}if (userList.Count > 0){userList.ForEach((item) => Console.WriteLine("UserName:" + item.UserName +"----Password:" + item.Password + "-----Role:" + item.Role.RoleName +"\n"));Console.ReadLine();}}

    3.2 一對多映射

    private static void OneToMany(string sqlConnectionString){Console.WriteLine("One To Many");List<User> userList = new List<User>();using (IDbConnection connection = GetSqlConnection(sqlConnectionString)){string sqlCommandText3 = @"SELECT c.UserId,c.Username AS UserName,c.PasswordHash AS [Password],c.Email,c.PhoneNumber,c.IsFirstTimeLogin,c.AccessFailedCount,c.CreationDate,c.IsActive,r.RoleId,r.RoleName FROM dbo.CICUser c WITH(NOLOCK)LEFT JOIN CICUserRole crON cr.UserId = c.UserIdLEFT JOIN CICRole rON r.RoleId = cr.RoleId";var lookUp = new Dictionary<int, User>();userList = connection.Query<User, Role, User>(sqlCommandText3,(user, role) =>{User u;if (!lookUp.TryGetValue(user.UserId, out u)){lookUp.Add(user.UserId, u = user);}u.Role.Add(role);return user;}, null, null, true, "RoleId", null, null).ToList();var result = lookUp.Values;}if (userList.Count > 0){userList.ForEach((item) => Console.WriteLine("UserName:" + item.UserName +"----Password:" + item.Password +"-----Role:" + item.Role.First().RoleName +"\n"));Console.ReadLine();}else{Console.WriteLine("No Data In UserList!");}}

    3.3 插入實體

    public static void InsertObject(string sqlConnectionString){string sqlCommandText = @"INSERT INTO CICUser(Username,PasswordHash,Email,PhoneNumber)VALUES(@UserName,@Password,@Email,@PhoneNumber )";using (IDbConnection conn = GetSqlConnection(sqlConnectionString)){User user = new User();user.UserName = "Dapper";user.Password = "654321";user.Email = "Dapper@infosys.com";user.PhoneNumber = "13795666243";int result = conn.Execute(sqlCommandText, user);if (result > 0){Console.WriteLine("Data have already inserted into DB!");}else{Console.WriteLine("Insert Failed!");}Console.ReadLine();}}

    3.4 執行存儲過程

    /// <summary>/// Execute StoredProcedure and map result to POCO/// </summary>/// <param name="sqlConnnectionString"></param>public static void ExecuteStoredProcedure(string sqlConnnectionString){List<User> users = new List<User>();using (IDbConnection cnn = GetSqlConnection(sqlConnnectionString)){users = cnn.Query<User>("dbo.p_getUsers", new { UserId = 2 },null, true, null, CommandType.StoredProcedure).ToList();}if (users.Count > 0){users.ForEach((user) => Console.WriteLine(user.UserName + "\n"));}Console.ReadLine();} /// <summary>/// Execute StroedProcedure and get result from return value/// </summary>/// <param name="sqlConnnectionString"></param>public static void ExecuteStoredProcedureWithParms(string sqlConnnectionString){DynamicParameters p = new DynamicParameters();p.Add("@UserName", "cooper");p.Add("@Password", "123456");p.Add("@LoginActionType", null, DbType.Int32, ParameterDirection.ReturnValue);using (IDbConnection cnn = GetSqlConnection(sqlConnnectionString)){cnn.Execute("dbo.p_validateUser", p, null, null, CommandType.StoredProcedure);int result = p.Get<int>("@LoginActionType");Console.WriteLine(result);}Console.ReadLine();}

    轉載于:https://www.cnblogs.com/BrokenIce/p/5706435.html

    總結

    以上是生活随笔為你收集整理的Dapper.NET——轻量ORM的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。