Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
C#中如何实现数据库查询的结果映射到对象?方法有哪些?_创想鸟

C#中如何实现数据库查询的结果映射到对象?方法有哪些?

答案:C#中常用数据库查询结果映射方式有五种。1. ADO.NET手动映射,性能高但代码重复;2. Entity Framework/EF Core,支持LINQ与自动映射,适合大型项目;3. Dapper微型ORM,性能接近原生且语法简洁;4. AutoMapper配合数据读取器,统一DTO映射规则;5. 自定义泛型工具通过反射实现通用映射,灵活但需处理性能与异常。选择依据项目规模、性能需求与开发效率权衡。

c#中如何实现数据库查询的结果映射到对象?方法有哪些?

在C#中,将数据库查询结果映射到对象是数据访问中的常见需求。实现方式有多种,每种适用于不同的场景和开发偏好。以下是几种主流方法:

1. 使用 ADO.NET 手动映射

这是最基础的方式,通过 SqlConnection、SqlCommand 和 SqlDataReader 执行查询,然后逐行读取数据并手动赋值给对象属性。

优点:完全控制,性能高;缺点:代码重复多,易出错。

示例:

public class User{    public int Id { get; set; }    public string Name { get; set; }    public string Email { get; set; }}

using (var connection = new SqlConnection(connectionString)){connection.Open();using (var command = new SqlCommand("SELECT Id, Name, Email FROM Users", connection))using (var reader = command.ExecuteReader()){var users = new List();while (reader.Read()){users.Add(new User{Id = reader.GetInt32("Id"),Name = reader.GetString("Name"),Email = reader.GetString("Email")});}return users;}}

2. 使用 Entity Framework(EF)或 EF Core

Entity Framework 是微软官方的 ORM 框架,支持自动将查询结果映射到实体类。

只需定义类与数据库表的对应关系(可通过数据注解或 Fluent API),EF 会自动生成 SQL 并完成映射。

示例:

public class AppDbContext : DbContext{    public DbSet Users { get; set; }}

// 查询自动映射using (var context = new AppDbContext()){var users = context.Users.Where(u => u.Name.Contains("John")).ToList();}

支持 LINQ 查询,类型安全,开发效率高。适合中大型项目。

3. 使用 Dapper 微型 ORM

Dapper 是一个轻量级扩展库,为 IDbConnection 添加了快速的对象映射能力。

它在性能上接近原生 ADO.NET,同时大幅简化映射代码。

示例:

using (var connection = new SqlConnection(connectionString)){    var users = connection.Query("SELECT * FROM Users WHERE Age > @Age", new { Age = 18 });    return users.ToList();}

Dapper 支持复杂类型映射、多结果集、存储过程等,广泛用于高性能场景。

4. 使用 AutoMapper 配合数据读取器

AutoMapper 本身不直接执行查询,但可与 ADO.NET 或其他数据源结合,将 DataReader 或 DataTable 映射到对象集合。

通常需要配合自定义映射逻辑或第三方扩展(如 AutoMapper.Data)使用。

示例思路:

using (var reader = command.ExecuteReader()){    var config = new MapperConfiguration(cfg => cfg.CreateMap());    var mapper = config.CreateMapper();    var users = mapper.Map<IEnumerable>(reader);}

适合已有大量 DTO 的项目,统一映射规则。

5. 自定义泛型映射工具

可通过反射编写通用映射方法,将 SqlDataReader 或 DataRow 自动填充到任意对象。

例如创建一个 DataReaderMapper 类:

public static List Map(IDataReader reader) where T : new(){    var list = new List();    var type = typeof(T);    var properties = type.GetProperties().Where(p => p.CanWrite);
while (reader.Read()){    var obj = new T();    foreach (var prop in properties)    {        if (!reader.IsDBNull(prop.Name))        {            var value = reader[prop.Name];            prop.SetValue(obj, Convert.ChangeType(value, prop.PropertyType));        }    }    list.Add(obj);}return list;

}

灵活但需注意性能和异常处理。

基本上就这些常用方式。选择哪种取决于项目规模、性能要求和开发效率权衡。小型项目可用 Dapper,大型系统推荐 EF Core,极致性能可手写 ADO.NET。

以上就是C#中如何实现数据库查询的结果映射到对象?方法有哪些?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1440187.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
什么是数据库的表分区?在C#中如何查询分区表?
上一篇 2025年12月17日 16:48:49
C#中如何使用反射动态映射数据库字段?示例是什么?
下一篇 2025年12月17日 16:49:04

相关推荐

发表回复

登录后才能评论
关注微信