Dapper.NET——轻量ORM

发布时间:2017-3-25 10:02:38 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Dapper.NET——轻量ORM ",主要涉及到Dapper.NET——轻量ORM 方面的内容,对于Dapper.NET——轻量ORM 感兴趣的同学可以参考一下。

Dapper是一款轻量级ORM工具(Github)。如果你在小的项目中,使用Entity Framework、NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀。你又觉得ORM省时省力,这时Dapper 将是你不二的选择。

1、为什么选择Dapper

  1. 轻量。只有一个文件(SqlMapper.cs),编译完成之后只有120k(好象是变胖了)
  2. 速度快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。
  3. 支持多种数据库。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server
  4. 可以映射一对一,一对多,多对多等多种关系。
  5. 性能高。通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能不错。
  6. 支持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();            }

上一篇:win8win10以管理员身份运行cmd方法
下一篇:Ubuntu14.04使用apt-fast来加快apt-get下载的教程

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款