FreeSql 全面指南:从底子到高级实战,深入解析读写分离与导航属性 ...

打印 上一主题 下一主题

主题 561|帖子 561|积分 1685

FreeSql 使用详解:从入门到高级

FreeSql 是一个开源的、轻量级的 ORM 框架,它为 .NET 开辟人员提供了丰富的功能,包括 CRUD 操作、读写分离、多租户、导航属性支持等。相比于 Entity Framework Core,FreeSql 在性能和特性上有一些独特的优势,特别是在复杂的数据库操作和分布式场景中。本文将详细先容 FreeSql 的各个功能,从基本的 CRUD 操作开始,逐步深入到读写分离和导航属性等高级特性。
一、FreeSql 入门

1.1 FreeSql 的安装

首先,您需要在项目中安装 FreeSql。可以通过 NuGet 来安装 FreeSql 的包。
  1. Install-Package FreeSql
复制代码
或者使用 .NET CLI:
  1. dotnet add package FreeSql
复制代码
1.2 FreeSql 的初始化

初始化 FreeSql 通常需要通过 IFreeSql 接口来操作。最简单的初始化示比方下:
  1. var fsql = new FreeSqlBuilder()
  2.     .UseConnectionString(DataType.MySql, "连接字符串")
  3.     .Build();
复制代码
这里我们使用了 MySQL 数据库,你可以根据现实需求替换为其他数据库,比方:


  • DataType.SqlServer 用于 SQL Server
  • DataType.PostgreSQL 用于 PostgreSQL
  • DataType.Sqlite 用于 SQLite
1.3 基本的 CRUD 操作

FreeSql 提供了简洁的 API 来执行基本的增编削查操作。下面是简单的增编削查示例:
1.3.1 插入数据

  1. var newUser = new User { Name = "张三", Age = 25 };
  2. var insertedId = fsql.Insert(newUser).ExecuteIdentity();
复制代码
1.3.2 查询数据

  1. var user = fsql.Select<User>().Where(a => a.Id == 1).First();
复制代码
1.3.3 更新数据

  1. fsql.Update<User>().Set(a => a.Age, 26).Where(a => a.Id == 1).ExecuteAffrows();
复制代码
1.3.4 删除数据

  1. fsql.Delete<User>().Where(a => a.Id == 1).ExecuteAffrows();
复制代码
二、FreeSql 进阶功能

2.1 查询优化

FreeSql 提供了丰富的查询功能和优化本领,比如分页查询、多表查询等。
2.1.1 分页查询

分页查询在大多数应用中是必不可少的,FreeSql 提供了简单的 API 来执行分页查询:
  1. var users = fsql.Select<User>()
  2.     .Page(1, 10)
  3.     .ToList();
复制代码
2.1.2 多表查询

多表查询也是 ORM 框架中的紧张特性。FreeSql 支持多种方式举行多表查询。
  1. var query = fsql.Select<User, Order>()
  2.     .LeftJoin((u, o) => u.Id == o.UserId)
  3.     .Where((u, o) => u.Age > 18)
  4.     .ToList((u, o) => new { u.Name, o.OrderId });
复制代码
2.2 事务管理

FreeSql 允许您在事务中执行多个数据库操作,确保数据同等性。
  1. using (var transaction = fsql.CreateTransaction())
  2. {
  3.     try
  4.     {
  5.         fsql.Insert(new User { Name = "张三", Age = 30 }).ExecuteAffrows();
  6.         fsql.Insert(new Order { UserId = 1, Amount = 100 }).ExecuteAffrows();
  7.         transaction.Commit();
  8.     }
  9.     catch
  10.     {
  11.         transaction.Rollback();
  12.         throw;
  13.     }
  14. }
复制代码
三、FreeSql 高级特性

3.1 读写分离

FreeSql 内置了读写分离的功能,实用于分布式场景或主从数据库架构。你可以通过配置多个连接字符串来实现读写分离:
  1. var fsql = new FreeSqlBuilder()
  2.     .UseMasterConnectionString("主库连接字符串")
  3.     .UseSlaveConnectionString("从库1连接字符串", "从库2连接字符串")
  4.     .Build();
复制代码


  • UseMasterConnectionString 用于设置主库的连接字符串,所有写操作将会发送到主库。
  • UseSlaveConnectionString 用于配置从库的连接字符串,所有读操作将会发送到从库。
FreeSql 将自动在读操作和写操作之间举行切换,从而实现读写分离。读写分离可以大概极大地提高体系的性能,尤其是在读操作密集型的应用场景中。
3.2 导航属性

FreeSql 支持导航属性,这使得处置惩罚实体之间的关联关系变得非常方便。假设我们有两个实体 User 和 Order,它们之间是一对多的关系:
  1. public class User
  2. {
  3.     public int Id { get; set; }
  4.     public string Name { get; set; }
  5.     [Navigate("UserId")]
  6.     public List<Order> Orders { get; set; }
  7. }
  8. public class Order
  9. {
  10.     public int Id { get; set; }
  11.     public int UserId { get; set; }
  12.     public decimal Amount { get; set; }
  13.     [Navigate("UserId")]
  14.     public User User { get; set; }
  15. }
复制代码
要查询带有导航属性的对象时,FreeSql 会自动加载关联的实体:
  1. var userWithOrders = fsql.Select<User>()
  2.     .IncludeMany(a => a.Orders)
  3.     .Where(a => a.Id == 1)
  4.     .ToOne();
复制代码
这种方式非常适当处置惩罚复杂的实体关系,避免了手动编写复杂的 SQL 语句。
3.3 缓存机制

FreeSql 提供了内置的缓存机制,可以将查询结果缓存起来,以减少数据库的访问次数,提拔性能。
  1. var cachedUser = fsql.Select<User>()
  2.     .Where(a => a.Id == 1)
  3.     .Cache(60, "user_cache") // 缓存 60 秒
  4.     .First();
复制代码
3.4 数据库审计

FreeSql 还支持数据库审计功能,可以自动跟踪实体的创建、更新和删除时间。你可以通过配置实体的审计属性来启用这一功能:
  1. public class User
  2. {
  3.     public int Id { get; set; }
  4.     public string Name { get; set; }
  5.    
  6.     public DateTime CreatedTime { get; set; }
  7.     public DateTime UpdatedTime { get; set; }
  8. }
复制代码
然后在 FreeSql 配置中启用审计功能:
  1. fsql.Aop.AuditValue += (s, e) =>
  2. {
  3.     if (e.Property.Name == "CreatedTime" && e.Value == null)
  4.         e.Value = DateTime.Now;
  5.     if (e.Property.Name == "UpdatedTime")
  6.         e.Value = DateTime.Now;
  7. };
复制代码
四、FreeSql 的最佳实践


  • 合理使用缓存:对于频繁查询但数据变动不大的场景,可以启用 FreeSql 的缓存功能,减少数据库的压力。
  • 使用读写分离:对于读多写少的体系,可以启用 FreeSql 的读写分离特性,提拔读操作的性能。
  • 合理操持导航属性:在处置惩罚复杂的数据库模子时,导航属性可以简化操作,但应留意防止循环依赖,须要时可举行懒加载处置惩罚。
五、总结

FreeSql 提供了强盛的 ORM 功能,可以大概简化复杂的数据库操作,提拔开辟服从。本文从基本的 CRUD 操作开始,先容了 FreeSql 的核心功能,包括读写分离、导航属性、缓存等高级特性。通过合理使用这些特性,您可以构建出高性能、可扩展的 .NET 应用。
希望这篇从入门到进阶的 FreeSql 指南能为您在开辟中提供资助。假如你想要进一步深入了解 FreeSql,建议查阅官方文档或社区资源,深入发掘其更多高级功能。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

刘俊凯

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表