linq2db快速入门指南:5分钟搭建你的第一个数据库应用
linq2db是一个轻量级、高性能的.NET ORM(对象关系映射)库,它使开发人员能够使用LINQ语法查询和操作关系数据库。作为最快的LINQ数据库访问库之一,linq2db在Dapper等微ORM和Entity Framework等重量级ORM之间提供了完美的平衡点。本文将为您提供完整的linq2db快速入门指南,帮助您在5分钟内搭建第一个数据库应用。😊
什么是linq2db ORM库?
linq2db是一个类型安全的SQL包装器,它提供了比微ORM更丰富的功能,同时保持了接近原生性能。与Entity Framework不同,linq2db不包含变更跟踪功能,这为您提供了更多控制权和更快的数据库访问速度。您的查询由C#编译器检查,支持轻松重构,同时保持了与数据库的薄抽象层。
第一步:安装linq2db
要开始使用linq2db,您只需要通过NuGet安装核心包。根据您的数据库选择相应的提供程序:
# 安装核心linq2db包
dotnet add package linq2db
# 根据您的数据库选择相应的提供程序
dotnet add package linq2db.SqlServer # SQL Server
dotnet add package linq2db.PostgreSQL # PostgreSQL
dotnet add package linq2db.MySql # MySQL/MariaDB
dotnet add package linq2db.SQLite # SQLite
dotnet add package linq2db.Oracle # Oracle
linq2db支持超过15种数据库系统,包括SQL Server、PostgreSQL、MySQL、SQLite、Oracle、Firebird、DB2、SAP HANA等。您可以在Source/LinqToDB/ProviderName.cs中找到完整的提供程序列表。
第二步:配置数据库连接
linq2db提供了多种配置数据库连接的方式。最简单的方法是通过DataOptions类直接传递连接字符串:
using LinqToDB;
// 配置SQL Server连接
var db = new DataConnection(
new DataOptions()
.UseSqlServer(@"Server=.\;Database=Northwind;Trusted_Connection=True;"));
// 或者配置PostgreSQL连接
var db = new DataConnection(
new DataOptions()
.UsePostgreSQL("Host=localhost;Database=mydb;Username=postgres;Password=password"));
您也可以使用配置文件或自定义设置提供程序。对于ASP.NET Core应用程序,linq2db提供了完整的依赖注入支持。
第三步:定义数据模型
linq2db支持三种映射配置方式:属性映射、流式配置和推断配置。让我们从最简单的属性映射开始:
using LinqToDB.Mapping;
[Table("Products")]
public class Product
{
[PrimaryKey, Identity]
public int ProductID { get; set; }
[Column("ProductName"), NotNull]
public string Name { get; set; }
[Column]
public decimal UnitPrice { get; set; }
[Column]
public int CategoryID { get; set; }
[Association(ThisKey = nameof(CategoryID), OtherKey = nameof(Category.ID))]
public Category Category { get; set; }
}
[Table("Categories")]
public class Category
{
[PrimaryKey, Identity]
public int ID { get; set; }
[Column, NotNull]
public string CategoryName { get; set; }
[Column]
public string Description { get; set; }
}
第四步:创建数据上下文
数据上下文是linq2db的核心,它连接您的POCO类和数据库:
public class NorthwindContext : DataConnection
{
public NorthwindContext() : base("Northwind") { }
public ITable<Product> Products => this.GetTable<Product>();
public ITable<Category> Categories => this.GetTable<Category>();
}
在app.config或web.config中配置连接字符串:
<connectionStrings>
<add name="Northwind"
connectionString="Server=.\;Database=Northwind;Trusted_Connection=True;"
providerName="SqlServer" />
</connectionStrings>
第五步:执行第一个查询
现在您可以开始使用LINQ语法查询数据库了!linq2db提供了完整的LINQ支持:
using (var db = new NorthwindContext())
{
// 基本查询
var products = from p in db.Products
where p.UnitPrice > 50
orderby p.Name descending
select p;
foreach (var product in products)
{
Console.WriteLine($"{product.Name}: ${product.UnitPrice}");
}
// 关联查询
var query = from p in db.Products
join c in db.Categories on p.CategoryID equals c.ID
select new
{
ProductName = p.Name,
CategoryName = c.CategoryName,
Price = p.UnitPrice
};
// 分页查询
var page = db.Products
.Where(p => p.UnitPrice > 10)
.OrderBy(p => p.Name)
.Skip(20)
.Take(10)
.ToList();
}
第六步:数据操作
linq2db支持完整的CRUD操作:
using (var db = new NorthwindContext())
{
// 插入数据
var newProduct = new Product
{
Name = "New Product",
UnitPrice = 29.99m
};
newProduct.ProductID = db.InsertWithInt32Identity(newProduct);
// 更新数据
db.Products
.Where(p => p.ProductID == 1)
.Set(p => p.UnitPrice, 39.99m)
.Update();
// 删除数据
db.Products
.Where(p => p.ProductID == 100)
.Delete();
// 批量插入
var products = new List<Product>
{
new Product { Name = "Product A", UnitPrice = 10.0m },
new Product { Name = "Product B", UnitPrice = 20.0m }
};
db.BulkCopy(products);
}
高级功能
事务支持
using (var db = new NorthwindContext())
{
db.BeginTransaction();
try
{
// 执行多个操作
db.Insert(product1);
db.Insert(product2);
db.CommitTransaction();
}
catch
{
db.RollbackTransaction();
throw;
}
}
存储过程调用
using (var db = new NorthwindContext())
{
var result = db.QueryProc<SalesByCategoryResult>(
"SalesByCategory",
new DataParameter("@CategoryName", "Beverages"),
new DataParameter("@OrdYear", "1998"));
}
批量操作
linq2db的批量复制功能非常适合大数据量导入:
var data = GetLargeDataSet(); // 获取大量数据
db.BulkCopy(data); // 高效批量插入
性能优化技巧
- 使用编译查询:对于频繁执行的查询,使用
CompiledQuery可以显著提高性能 - 合理使用连接池:确保正确管理
DataConnection生命周期 - 选择性加载:只选择需要的列,避免不必要的数据传输
- 利用索引:确保数据库表有适当的索引
常见问题解答
Q: linq2db与Entity Framework有什么区别? A: linq2db更轻量、更快,没有变更跟踪,给您更多控制权,同时保持类型安全的LINQ查询。
Q: 支持哪些数据库? A: linq2db支持SQL Server、PostgreSQL、MySQL、SQLite、Oracle、Firebird、DB2、SAP HANA等主流数据库。
Q: 如何生成数据模型? A: 可以使用linq2db.cli工具从现有数据库生成POCO类:
dotnet tool install -g linq2db.cli
linq2db scaffold "Server=.;Database=Northwind;Trusted_Connection=True;" SqlServer
总结
linq2db是一个强大而灵活的ORM解决方案,特别适合需要高性能和完全控制权的.NET应用程序。通过本文的快速入门指南,您已经学会了如何安装、配置linq2db,并执行基本的数据库操作。linq2db的简单API和强大的LINQ支持使其成为.NET开发人员的理想选择。
要了解更多高级功能,请查看官方文档或探索AI功能源码。现在就开始使用linq2db构建您的高性能数据库应用吧!🚀
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




