一个简单O/R M组件(HFSoft.Data).NET
封面图
•
2025-11-28
•
asp
166
0
0
0
在 .NET 中,一个简单的 **O/R Mapping(对象-关系映射)组件**(如 `HFSoft.Data`)通常用于将数据库表映射到 .NET 类,并提供对数据库的简单操作(如增删改查)。下面我将为你构建一个**简单的 O/R 映射组件**的示例代码结构,假设你希望实现一个轻量级、自定义的 ORM 工具。 --- ## ✅ 示例:一个简单的 O/R 映射组件(类似 HFSoft.Data) ### 1. 定义实体类(Entity) ```csharp public class User { public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } } ``` --- ### 2. 定义数据库连接配置 ```csharp public class DbConfig { public string ConnectionString { get; set; } = "Server=.;Database=TestDB;Trusted_Connection=True;"; } ``` --- ### 3. 定义 ORM 基础类(BaseRepository) ```csharp public abstract class BaseRepository<T> where T : class { protected readonly string _connectionString; protected BaseRepository(string connectionString) { _connectionString = connectionString; } protected T GetSingle(string query, Func<IDataReader, T> mapper) { using (var conn = new SqlConnection(_connectionString)) { conn.Open(); using (var cmd = new SqlCommand(query, conn)) { using (var reader = cmd.ExecuteReader()) { if (reader.Read()) { return mapper(reader); } } } } return null; } protected List<T> GetList(string query, Func<IDataReader, T> mapper) { var list = new List<T>(); using (var conn = new SqlConnection(_connectionString)) { conn.Open(); using (var cmd = new SqlCommand(query, conn)) { using (var reader = cmd.ExecuteReader()) { while (reader.Read()) { list.Add(mapper(reader)); } } } } return list; } protected int Execute(string query) { using (var conn = new SqlConnection(_connectionString)) { conn.Open(); using (var cmd = new SqlCommand(query, conn)) { return cmd.ExecuteNonQuery(); } } } } ``` --- ### 4. 实现具体 Repository(UserRepository) ```csharp public class UserRepository : BaseRepository<User> { public UserRepository(string connectionString) : base(connectionString) { } public User GetById(int id) { string sql = $"SELECT * FROM Users WHERE Id = {id}"; return GetSingle(sql, reader => { return new User { Id = reader.GetInt32(0), Name = reader.GetString(1), Email = reader.GetString(2) }; }); } public List<User> GetAll() { string sql = "SELECT * FROM Users"; return GetList(sql, reader => { return new User { Id = reader.GetInt32(0), Name = reader.GetString(1), Email = reader.GetString(2) }; }); } public int Insert(User user) { string sql = $"INSERT INTO Users (Name, Email) VALUES ('{user.Name}', '{user.Email}')"; return Execute(sql); } public int Update(User user) { string sql = $"UPDATE Users SET Name = '{user.Name}', Email = '{user.Email}' WHERE Id = {user.Id}"; return Execute(sql); } public int Delete(int id) { string sql = $"DELETE FROM Users WHERE Id = {id}"; return Execute(sql); } } ``` --- ### 5. 使用示例 ```csharp class Program { static void Main(string[] args) { var config = new DbConfig(); var repo = new UserRepository(config.ConnectionString); // 插入用户 repo.Insert(new User { Name = "Alice", Email = "alice@example.com" }); // 获取所有用户 var users = repo.GetAll(); foreach (var user in users) { Console.WriteLine($"ID: {user.Id}, Name: {user.Name}, Email: {user.Email}"); } // 更新用户 var userToUpdate = repo.GetById(1); if (userToUpdate != null) { userToUpdate.Name = "Bob"; repo.Update(userToUpdate); } // 删除用户 repo.Delete(1); } } ``` --- ## 🔧 可扩展功能建议 你可以进一步增强这个组件: | 功能 | 说明 | |------|------| | 支持 LINQ 查询 | 使用 `System.Linq` 或 `Expression Trees` | | 支持事务 | 使用 `SqlTransaction` | | 自动映射 | 使用反射或特性(如 `[Column]`) | | 支持更多数据库 | 如 MySQL、PostgreSQL 等 | | 异步支持 | 使用 `async/await` | --- ## 📦 依赖项 确保项目中引用了以下 NuGet 包: - `System.Data.SqlClient`(用于 SQL Server) - `System.Linq`(可选) --- 如果你需要的是一个类似 **HFSoft.Data** 的第三方库,请提供更多信息(如文档、API),我可以帮助你更好地理解它的使用方式。如果这是一个你正在开发的组件,上面的代码可以作为起点。需要我帮你写成更完整的库结构吗?
上一篇:
FSO如何取得文件修改日期和相关信息
下一篇:
Upfile FSO
标题录入,一次不能超过6条
留言
评论