衣冠楚楚的ORM(对象关系映射),获得广泛的一致好评与数据库在。net由于其高速度和简单。我们学到的基础知识和衣冠楚楚的在一起工作前一篇文章在这里。我们还讨论了使用在一个衣冠楚楚的扩展库之前的文章。在本文中,我们将看看一些短小精悍的高级特性。
使用本文中提供的代码示例,您应该Visual Studio 2022安装在您的系统。如果你不已经有一个副本,你可以在这里下载Visual Studio 2022。
创建一个ASP。网络核心Web API project in Visual Studio 2022
首先,让我们创建一个ASP。网络核心7 project in Visual Studio 2022. Follow these steps:
- 启动Visual Studio 2022 IDE。
- 点击“创建新项目。”
- 在“创建新项目”窗口中,选择“ASP。网络核心Web API” from the list of templates displayed.
- 单击Next。
- 在“配置您的新项目”窗口中,指定新项目的名称和位置。
- (可选)检查“解决方案和项目在同一个目录”复选框,根据您的喜好。
- 单击Next。
- 下所示的“其他信息”窗口中,把“使用控制器(取消使用最少的api)”复选框。我们不会在这个项目中使用最少的api。离开“验证类型”设置为“无”(默认)。
- 确保复选框“启用开放API支持,”“为HTTPS,配置”和“使码头工人”仍未检查。在这里我们不会使用这些功能。
- 单击Create。
我们将使用ASP。网络核心7 Web API project to work with advanced features of Dapper in the sections below.
衣冠楚楚的是什么?为什么使用它呢?
对象关系映射器已经使用了多年来解决对象模型之间的“阻抗不匹配”编程语言和数据模型在关系数据库中。Stack Overflow团队创建了衣冠楚楚的是一个简单的ORM为。net。衣冠楚楚的是一个开源项目在GitHub上。
衣冠楚楚的是一个轻量级、高性能micro-ORM。net和。net框架的核心,支持广泛的数据库。这些包括Microsoft SQL Server、Oracle数据库MySQL、PostgreSQL, SQLite, SQL CE。与其他orm相比,衣冠楚楚的轻量级,快速、简单,设计时考虑到性能和可用性。
在衣冠楚楚的高级功能
在本节中,我们将研究一些短小精悍的高级特性的相关的代码示例。
Multi-mapping
衣冠楚楚的multi-mapping功能允许您将查询结果映射到多个对象。这种类型的查询可以用来获取相关数据与一个查询从众多表。通过一个委托函数作为参数来查询方法或QueryAsync方法,您可以指示衣冠楚楚的查询的结果映射到不同的对象。考虑以下两个类。
公共类作者{公共int Id{得到;设置;公共字符串FirstName}{得到;设置;公共字符串LastName}{得到;设置;公共int Id}}公开课书{{得到;设置;公共int AuthorId}{得到;设置; } public string Title { get; set; } public string ISBN { get; set; } }
下面的代码片段说明了如何实现multi-mapping使用衣冠楚楚的。
字符串connectionString = "指定连接到数据库的连接字符串…”;使用(var连接= new SqlConnection (connectionString)){字符串查询= " SELECT *作者书籍内连接B。Id = B.AuthorId”;作者var =连接。查询<作者、书、作者>(查询,(作者、图书)= >{作者。书=作者。书? ?新列表<书> ();author.Books.Add(书);},splitOn:“Id”) .Distinct () .ToList ();}
广泛的数据库支持
衣冠楚楚的支持连接和工作与SQL Server等多种类型的数据库,Oracle数据库,MySQL和PostgreSQL。下面的代码片段展示了如何使用短小精悍的连接不同的数据库。
var连接= new SqlConnection (connectionString);/ /连接到SQL Server数据库
var连接= new OracleConnection (connectionString);/ /连接Oracle数据库
var连接= new MySqlConnection (connectionString);/ /连接到MySQL数据库
var连接= new NpgsqlConnection (connectionString);/ /连接到PostgreSQL数据库
批量插入
衣冠楚楚的提供批量插入操作,可以大大提高性能,当你试图将大量数据插入数据库。在ADO SqlBulkCopy类。网可以有效的源和一个数据库之间的数据传输。在衣冠楚楚的,您可以执行批量插入通过SqlMapperExtensions.Insert可枚举对象集合。
以下代码示例展示了如何使用短小精悍的执行批量插入你的ASP。网络核心7应用程序。
使用(var连接= new SqlConnection (connectionString)) {connection.Open ();var = GetOrders订单();var事务= connection.BeginTransaction ();{连接尝试。执行(“插入订单(Id、ProductId数量)值(@ Id, @ProductId @Amount)”、订单);transaction.Commit ();}catch {transaction.Rollback ();扔;}返回;}
存储过程
您可以使用查询,QueryFirstOrDefault、执行和衣冠楚楚的类似的方法来调用存储过程。衣冠楚楚的还支持交互输出参数和返回值的存储过程通过动态参数类,它简化了如何处理参数。
下面的代码示例显示了如何使用存储过程中使用短小精悍的ASP。网络核心7应用程序。
使用(var连接= new SqlConnection (connectionString)) {var = new参数动态参数();int customerId = 27个;字符串orderStatus =“等待”;参数。添加(“@CustomerId customerId, DbType.Int32);参数。Add (“@OrderStatus orderStatus DbType.String);var =订单连接。查询<订单> (“GetOrdersByStatus”参数,commandType: CommandType.StoredProcedure);/ /编写代码来处理检索订单返回orders.ToList (); }
查询分页
在处理大型结果集时,分页是提高性能和效率的关键。跳过和以短小精悍的方法可以用来执行查询分页。通过结合这些方法与SQL子句抵消和取下,可以有效地从数据库中检索数据的一个子集。
下面是一个代码示例,演示了如何使用查询分页衣冠楚楚的。
字符串connectionString = "指定连接到数据库的连接字符串…”;使用(var连接= new SqlConnection (connectionString)) {var pageNumber = 1;var页大小= 10;var抵消= (pageNumber - 1) *页大小的影响;var查询= @ SELECT *订单秩序的OrderId抵消@Offset行取下@PageSize行只有”;var = new参数{抵消=抵消,页大小=页大小};返回连接。< >订单查询(查询、参数).ToList ();}
查询缓存
这是衣冠楚楚的一个很好的特性,大大提高了性能,特别是经常运行查询。你可以在衣冠楚楚的缓存查询和结果。首次执行查询时,查询的结果在执行存储在缓存中。每当执行相同的查询缓存中的数据,返回缓存的数据,而不是一个API调用或从数据库检索数据。
以下代码示例展示了如何使用查询缓存。
从作者var sql = " SELECT * AuthorId = @AuthorId”;var =联系作者。作者QueryFirstOrDefault < > (sql,新{AuthorId = AuthorId});/ /查询下次执行时,它将使用var cachedAuthor =连接缓存的结果。作者QueryFirstOrDefault < > (sql,新{AuthorId = AuthorId});
动态参数
衣冠楚楚的允许将参数值传递给查询使用匿名类型或字典。这个特性很有用,当参数的数量或其值在编译时是未知的。下面的代码片段说明了如何使用该特性在衣冠楚楚的。
使用(var连接= new SqlConnection (connectionString)) {var = new参数{CustomerId = 1, OrderStatus =“运”};从订单查询var = " Select * CustomerId = @CustomerId和状态= @OrderStatus”;var =订单连接。< >订单查询(查询、参数).ToList ();/ /编写代码来处理检索订单返回orders.ToList ();}
衣冠楚楚的是一个轻量级的,可定制的ORM关注性能和简单。衣冠楚楚的复杂特性可以显著提高数据访问功能,使开发人员更有效地在ASP与数据库进行交互。网络核心应用程序。
尽管衣冠楚楚的相当丰富的功能,它不提供的所有功能更强大的orm等实体框架。因此,有必要分析应用程序的需求,选择合适的数据访问技术。