快速入门ORMX,学习安装配置、实体定义、数据库连接和基本的CRUD操作。 关键字:ORMX入门, 快速开始, 安装配置, CRUD操作, 示例代码
第二章:快速开始
2.1 安装 ORMX
2.1.1 通过 NuGet 安装
使用 .NET CLI 安装:
dotnet add package JCode.ORMX
或者使用 NuGet 包管理器控制台:
Install-Package JCode.ORMX
2.1.2 添加命名空间引用
在代码中引用必要的命名空间:
using JCode.ORMX.Abstractions;
using JCode.ORMX.Attributes;
using JCode.ORMX.DbProvider;
using JCode.ORMX.Core;
using Microsoft.Data.Sqlite;
2.2 第一个示例:Hello World
让我们从一个简单的示例开始,体验 ORMX 的基本用法。
2.2.1 定义实体类
首先,定义一个简单的用户实体类:
using JCode.ORMX.Attributes;
[Table(Name = "Users")]
public class User
{
[Column(IsPrimaryKey = true, IsAutoIncrement = true)]
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public int Age { get; set; }
}
代码说明:
[Table(Name = "Users")]:指定数据库表名为 "Users"[Column(IsPrimaryKey = true, IsAutoIncrement = true)]:标记 Id 为主键并自动增长- 其他属性会自动映射到同名的数据库列
关于实体映射的详细说明,请查阅实体映射。
2.2.2 创建数据库连接
ORMX 提供了两种连接管理方式,推荐使用方式一(传入连接字符串)。
方式一:传入连接字符串(推荐)
using JCode.ORMX.DataProviders.SQLite;
// 创建数据库提供程序(内部自动创建连接)
using var provider = new SqliteDatabaseProvider("Data Source=:memory:");
// 获取表管理器(无需额外参数)
var tableManager = provider.GetTableManager();
方式二:传入已创建的连接实例
using JCode.ORMX.DataProviders.SQLite;
using Microsoft.Data.Sqlite;
// 创建数据库连接
using var connection = new SqliteConnection("Data Source=:memory:");
connection.Open();
// 创建数据库提供程序
using var provider = new SqliteDatabaseProvider(connection);
// 获取表管理器
var tableManager = provider.GetTableManager();
支持的数据库类型:
- SQLite:
new SqliteDatabaseProvider(connectionString)或new SqliteDatabaseProvider(connection) - MySQL:
new MySqlDatabaseProvider(connectionString)或new MySqlDatabaseProvider(connection) - PostgreSQL:
new PgSqlDatabaseProvider(connectionString)或new PgSqlDatabaseProvider(connection) - SQL Server:
new SqlServerDatabaseProvider(connectionString)或new SqlServerDatabaseProvider(connection) - Rides:
new RidesDatabaseProvider(connectionString)或new RidesDatabaseProvider(connection)
关于数据库连接的详细配置,请参考数据库连接。
2.2.3 获取表对象
获取表对象,用于执行数据库操作:
var userTable = tableManager.Table<User>();
注意: ITable<T> 接口没有实现 IDisposable,不需要使用 using 语句。资源由 SqliteDatabaseProvider 统一管理。
2.2.4 完整的 Hello World 示例
下面是一个完整的示例,演示如何创建、查询、更新和删除用户:
using System;
using JCode.ORMX.Attributes;
using JCode.ORMX.DataProviders.SQLite;
// 定义实体类
[Table(Name = "Users")]
public class User
{
[Column(IsPrimaryKey = true, IsAutoIncrement = true)]
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public int Age { get; set; }
}
class Program
{
static void Main(string[] args)
{
// 创建数据库提供程序(推荐方式:传入连接字符串)
using var provider = new SqliteDatabaseProvider("Data Source=:memory:");
var tableManager = provider.GetTableManager();
// 获取表对象
var userTable = tableManager.Table<User>();
// 1. 创建用户
Console.WriteLine("=== 创建用户 ===");
var newUser = new User
{
Name = "张三",
Email = "zhangsan@example.com",
Age = 25
};
var insertedUser = userTable.Insert(newUser);
Console.WriteLine(<div class="latex">$"用户创建成功,ID: {insertedUser.Id}");
// 2. 查询用户
Console.WriteLine("\n=== 查询用户 ===");
var foundUser = userTable.Where(u => u.Id == insertedUser.Id).FirstOrDefault();
Console.WriteLine($</div>"找到用户: {foundUser.Name}, 邮箱: {foundUser.Email}, 年龄: {foundUser.Age}");
// 3. 更新用户
Console.WriteLine("\n=== 更新用户 ===");
foundUser.Age = 26;
userTable.Update(foundUser);
var updatedUser = userTable.Where(u => u.Id == insertedUser.Id).FirstOrDefault();
Console.WriteLine(<div class="latex">$"用户年龄已更新为: {updatedUser.Age}");
// 4. 查询所有用户
Console.WriteLine("\n=== 查询所有用户 ===");
var allUsers = userTable.GetList();
Console.WriteLine($</div>"总共有 {allUsers.Count} 个用户");
// 5. 删除用户
Console.WriteLine("\n=== 删除用户 ===");
userTable.Where(u => u.Id == insertedUser.Id).Delete();
var deletedUser = userTable.Where(u => u.Id == insertedUser.Id).FirstOrDefault();
Console.WriteLine(deletedUser == null ? "用户已删除" : "删除失败");
}
}
运行结果:
=== 创建用户 ===
用户创建成功,ID: 1
=== 查询用户 ===
找到用户: 张三, 邮箱: zhangsan@example.com, 年龄: 25
=== 更新用户 ===
用户年龄已更新为: 26
=== 查询所有用户 ===
总共有 1 个用户
=== 删除用户 ===
用户已删除
2.3 常见连接字符串
2.3.1 SQLite
// 内存数据库(测试用)
"Data Source=:memory:"
// 文件数据库
"Data Source=mydatabase.db"
// 带密码的数据库
"Data Source=mydatabase.db;Password=mypassword;"
2.3.2 MySQL
// 基本连接
"Server=localhost;Database=mydb;Uid=root;Pwd=password;"
// 指定端口
"Server=localhost;Port=3306;Database=mydb;Uid=root;Pwd=password;"
// 带字符集
"Server=localhost;Database=mydb;Uid=root;Pwd=password;Charset=utf8mb4;"
2.3.3 PostgreSQL
// 基本连接
"Host=localhost;Database=mydb;Username=postgres;Password=password;"
// 指定端口
"Host=localhost;Port=5432;Database=mydb;Username=postgres;Password=password;"
// 带超时设置
"Host=localhost;Database=mydb;Username=postgres;Password=password;Timeout=30;"
2.3.4 SQL Server
// 基本连接
"Server=localhost;Database=mydb;User Id=sa;Password=password;"
// 使用 Windows 身份验证
"Server=localhost;Database=mydb;Integrated Security=True;"
// 指定端口
"Server=localhost,1433;Database=mydb;User Id=sa;Password=password;"
关于数据库连接的详细配置,请参考数据库连接。
2.4 资源管理最佳实践
2.4.1 使用 using 语句
始终使用 using 语句来管理数据库提供程序,确保资源正确释放:
using JCode.ORMX.DataProviders.SQLite;
// 推荐:使用 using 语句(传入连接字符串)
using (var provider = new SqliteDatabaseProvider("Data Source=test.db"))
{
var tableManager = provider.GetTableManager();
var userTable = tableManager.Table<User>();
// 数据库操作
// provider 释放时会自动释放内部的连接和 SQL 执行器
}
// 不推荐:手动管理资源
var provider = new SqliteDatabaseProvider("Data Source=test.db");
var tableManager = provider.GetTableManager();
var userTable = tableManager.Table<User>();
// 数据库操作
provider.Dispose(); // 容易忘记调用
说明:
SqliteDatabaseProvider实现了IDisposable接口- 使用
using语句可以自动释放资源 - 内部会自动释放数据库连接和 SQL 执行器
ITable<T>接口没有实现IDisposable,不需要使用using语句
2.4.2 连接字符串管理
将连接字符串放在配置文件中,而不是硬编码:
// appsettings.json
{
"ConnectionStrings": {
"DefaultConnection": "Data Source=mydatabase.db"
}
}
using JCode.ORMX.DataProviders.SQLite;
// 读取配置
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
var connectionString = configuration.GetConnectionString("DefaultConnection");
// 创建数据库提供程序
using var provider = new SqliteDatabaseProvider(connectionString);
var tableManager = provider.GetTableManager();
var userTable = tableManager.Table<User>();
总结
本章介绍了如何快速开始使用 ORMX 框架。通过 NuGet 安装 ORMX 后,只需定义实体类、创建数据库连接、获取表对象,即可进行基本的 CRUD 操作。ORMX 提供了两种连接管理方式,推荐使用传入连接字符串的方式,由框架自动管理连接。使用 using 语句可以确保资源正确释放,连接字符串应该存储在配置文件中而非硬编码。通过完整的 Hello World 示例,我们演示了创建、查询、更新和删除用户的完整流程,展示了 ORMX 简洁直观的 API 设计。
扩展思考
在实际项目中,如何组织和管理多个实体类和数据库连接?对于大型应用,是否需要引入仓储模式或工作单元模式来进一步抽象数据访问层?ORMX 的简洁设计如何与依赖注入容器集成,以实现更好的可测试性和可维护性?这些问题值得在深入学习后进一步探索。