高级操作使用Dapper.Net

学习如何使用DapperExtensions库并使用短小精悍的执行先进的操作

  • 在Facebook上分享
  • 在Twitter上分享
  • 分享在LinkedIn
  • 在Reddit分享
  • 通过电子邮件分享
  • 印刷资源
advancedoperationsusingdapper

衣冠楚楚的。网是一个简单、灵活、快速、开源的、轻量级的ORM由山姆藏红花的堆栈溢出。衣冠楚楚的理解,迅速开始使用它,你可以看一看在本系列前一篇文章

最好的两个世界

衣冠楚楚的最好的事情是,虽然它是轻量级的,易于使用,它提供了你两全其美——你得到几乎相同的执行速度,ADO。净,同时你少后容易执行一个查询。

公共静态IEnumerable <事件> GetEventsBySpeaker (int speakerId)

{

字符串connectionString = ConfigurationManager.ConnectionStrings .ConnectionString (“DBConnectionString”);

使用(SqlConnection连接= new SqlConnection (connectionString))

{

connection.Open ();

IEnumerable <事件> =结果

连接。查询<事件> (“SELECT * FROM事件SpeakerId = @SpeakerId”,新{SpeakerId = SpeakerId});

返回结果;

}

}

DapperExtensions图书馆

现在有许多NuGet包衣冠楚楚的可用。其中一个是DapperExtensions。你可以安装DapperExtensions在Visual Studio中使用PackageManager窗口。DapperExtensions库包含了许多特性,包括GetList和计数方法更高级的查询,支持复合主键,等等。你可以看一看这个库的功能的完整列表GitHub上

DapperExtensions允许您使用更高级的查询谓词。这里有一个例子,说明了这一点。

公共静态IEnumerable <议长> GetSpeakers ()

{

字符串connectionString = ConfigurationManager.ConnectionStrings .ConnectionString (“DBConnectionString”);

使用(SqlConnection连接= new SqlConnection (connectionString))

{

connection.Open ();

var谓词=谓词。字段<议长>(= >年代。IsActive,运营商。情商,真正的);

返回connection.GetList <议长>(谓词);

}

}

使用短小精悍的处理事务

事务包含一个单位的声明保证要么全部执行。在执行一个事务块,如果一个事务块的操作失败,整个事务是流产,即。,整个事务失败。

现在让我们进入行动!假设我们有两个数据库中的表命名,演讲者和事件。虽然演讲者表包含扬声器的信息一个事件,事件表包含一个或多个事件信息,即。演讲者的事件,事件的日期,事件的描述等。

这是脚本用于创建这两个数据库表。

创建表(dbo)。(说话人)(

[SpeakerId] [int)标识(1,1)非空,

[名字][varchar](50)为空,

(姓)varchar (50) NULL

主键约束(PK_Speaker)集群

(

[SpeakerId] ASC

)与(PAD_INDEX =, STATISTICS_NORECOMPUTE =, IGNORE_DUP_KEY =, ALLOW_ROW_LOCKS =, ALLOW_PAGE_LOCKS =)在(初级)

)(初级)

创建表(dbo)。(事件)(

[EventId] [int)标识(1,1)非空,

[EventName] [varchar](50)为空,

[EventDescription] [varchar](50)为空,

[StartDate可以][datetime)空,

[EndDate] [datetime)空,

【评论】【varchar)空(max),

主键约束(PK_Event)集群

(

[EventId] ASC

)与(PAD_INDEX =, STATISTICS_NORECOMPUTE =, IGNORE_DUP_KEY =, ALLOW_ROW_LOCKS =, ALLOW_PAGE_LOCKS =)在(初级)

)[主要]TEXTIMAGE_ON(初级)

创建一个数据库并执行上面的脚本创建两个表即扬声器和事件。现在,填充一些假记录到这两个表中,这样您就可以测试这个项目我们会写。

现在假设您有一个需要把特定的细节从议长和事件表演讲者不再可用,并且你不需要储备演讲者的细节,或者,等。下面的代码说明了如何做到这一点。

公共静态int DeleteSpeaker(扬声器扬声器)

{

字符串connectionString = ConfigurationManager.ConnectionStrings .ConnectionString (“DBConnectionString”);

试一试

{

使用(IDbConnection连接= new SqlConnection (connectionString))

{

字符串speakerQuery = "删除从扬声器SpeakerId = @SpeakerId”;

字符串eventQuery = "删除从事件SpeakerId = @SpeakerId”;

IDbTransaction事务= connection.BeginTransaction ();

int rowsAffected =连接。执行(speakerQuery、新{SpeakerId =议长。SpeakerId}、事务);

rowsAffected + =连接。执行(eventQuery、新{SpeakerId =议长。SpeakerId}、事务);

transaction.Commit ();

返回rowsAffected;

}

}

捕获(异常交货)

{

Console.WriteLine (ex.Message);

返回1;

}

}

调用上述方法,所有您需要做的是创建一个演讲者类的实例并分配SpeakerId属性这个类的实例的一个值,表示说话者你想删除从您的数据库。

当您执行上面的代码段中,演讲者的信息特别议长将被删除从数据库中的表。

ExecuteMapperQuery和ExecuteMapperCommand方法

衣冠楚楚的。净利用扩展方法两个映射函数添加到IDbConnection接口。这些包括ExecuteMapperQuery和ExecuteMapperCommand方法。前者是用于将一个查询的结果映射到一个强类型列表,后者是用于将一个查询的结果映射到一个动态对象列表。这里有一个例子,演示了如何使用ExecuteMapperQuery扩展方法。

= > <事件事件列表连接。ExecuteMapperQuery <客户> (“SELECT *从事件SpeakerId = @ Id,新{Id = 3});

版权©2016 IDG通信公司。

奖2023年信息世界的技术。现在打开条目!