新乡 网站运营,房地产网站建设流程,公司申请邮箱怎么申请,中国十大公关公司排名市面上有很多流行的 ORM#xff08;对象关系映射#xff09;框架可以用于 .NET 开发。本文主要针对以下几种常见的 ORM 框架#xff0c;对其优劣进行分析及总结#xff0c;希望能够帮助大家进行ORM框架的使用有所帮助。
1. Entity Framework (EF) 特点 • 官方支持对象关系映射框架可以用于 .NET 开发。本文主要针对以下几种常见的 ORM 框架对其优劣进行分析及总结希望能够帮助大家进行ORM框架的使用有所帮助。
1. Entity Framework (EF) 特点 • 官方支持由 Microsoft 开发和维护是 .NET 生态系统中最受欢迎的 ORM 框架。 • 丰富的特性 • 支持 Code First、Database First 和 Model First 等多种开发模式。 • 提供强大的 LINQ 查询支持。 • 内置迁移工具方便数据库版本控制。 • 支持多种数据库如 SQL Server、MySQL、PostgreSQL、SQLite 等。 • 性能优化 • 提供了缓存机制、异步操作等性能优化选项。 • 社区活跃 • 拥有庞大的开发者社区和丰富的文档资源。 示例代码
using Microsoft.EntityFrameworkCore;public class BloggingContext : DbContext
{public DbSetBlog Blogs { get; set; }public DbSetPost Posts { get; set; }protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder){optionsBuilder.UseSqlServer(YourConnectionStringHere);}
}
2. Dapper 特点 • 轻量级Dapper 是一个微 ORM专注于简单的查询和映射性能极高。 • 简洁易用 • 使用简单学习曲线低。 • 直接执行 SQL 查询并返回强类型结果。 • 灵活性 • 允许编写原生 SQL 查询适合需要高度控制查询语句的场景。 • 性能优异 • 性能非常接近直接使用 ADO.NET适合高并发场景。 示例代码
using Dapper;
using System.Data.SqlClient;public class Product
{public int Id { get; set; }public string Name { get; set; }public decimal Price { get; set; }
}public ListProduct GetProducts()
{using (var connection new SqlConnection(YourConnectionStringHere)){return connection.QueryProduct(SELECT * FROM Products).ToList();}
}
3. NHibernate 特点 • 历史悠久基于 Java 的 Hibernate 框架移植而来功能强大且成熟。 • 丰富的特性 • 支持复杂的映射配置包括继承、多对多关系等。 • 提供缓存、事务管理等功能。 • 支持多种数据库如 SQL Server、MySQL、PostgreSQL 等。 • 灵活性 • 配置灵活支持 XML 和 Fluent API 两种方式。 • 学习曲线较陡 • 功能丰富但也相对复杂初学者可能需要更多时间来掌握。 示例代码
using NHibernate;
using NHibernate.Cfg;public class Product
{public virtual int Id { get; set; }public virtual string Name { get; set; }public virtual decimal Price { get; set; }
}public class ProductMap : ClassMappingProduct
{public ProductMap(){Table(Products);Id(x x.Id, m m.Generator(Generators.Identity));Property(x x.Name);Property(x x.Price);}
}public class Program
{private static ISessionFactory sessionFactory;public static void Main(string[] args){var configuration new Configuration();configuration.Configure();configuration.AddMapping(new ProductMap());sessionFactory configuration.BuildSessionFactory();using (var session sessionFactory.OpenSession()){using (var transaction session.BeginTransaction()){var product session.GetProduct(1);Console.WriteLine(product.Name);transaction.Commit();}}}
}
4. LLBLGen Pro 特点 • 商业产品提供专业版和社区版功能全面且性能优越。 • 丰富的特性 • 支持多种数据库如 SQL Server、MySQL、PostgreSQL、Oracle 等。 • 提供强大的代码生成工具自动生成实体类和数据访问层代码。 • 支持 LINQ 查询、事务管理等功能。 • 灵活性 • 可以选择不同的设计模式如 Active Record、Repository 等。 • 性能优化 • 提供了多种性能优化选项如批量操作、缓存机制等。 示例代码
using SD.LLBLGen.Pro.ORMSupportClasses;
using SD.LLBLGen.Pro.Examples.EntityClasses;public class ProductService
{private readonly IPersistenceCore _persistenceCore;public ProductService(IPersistenceCore persistenceCore){_persistenceCore persistenceCore;}public ListProductEntity GetProducts(){using (var adapter new DataAccessAdapter()){var products new ListProductEntity();adapter.FetchEntityCollection(products, null);return products;}}
}
5. NPoco 特点 • 轻量级类似于 Dapper但提供了更多的功能。 • 简洁易用 • 使用简单学习曲线低。 • 支持 LINQ 查询和 POCO 映射。 • 灵活性 • 允许编写原生 SQL 查询适合需要高度控制查询语句的场景。 • 性能优异 • 性能接近 Dapper适合高并发场景。 示例代码
using NPoco;
using System.Data.SqlClient;public class Product
{public int Id { get; set; }public string Name { get; set; }public decimal Price { get; set; }
}public class Database : Database
{public Database() : base(YourConnectionStringHere, DatabaseType.SqlServer2012) { }
}public ListProduct GetProducts()
{using (var db new Database()){return db.FetchProduct(SELECT * FROM Products);}
}
6. RepoDb 特点 • 轻量级专注于高性能的数据访问操作。 • 简洁易用 • 使用简单学习曲线低。 • 支持 LINQ 查询和 POCO 映射。 • 灵活性 • 允许编写原生 SQL 查询适合需要高度控制查询语句的场景。 • 性能优异 • 性能非常接近直接使用 ADO.NET适合高并发场景。 示例代码
using RepoDb;
using System.Data.SqlClient;public class Product
{public int Id { get; set; }public string Name { get; set; }public decimal Price { get; set; }
}public class Program
{public static void Main(string[] args){using (var connection new SqlConnection(YourConnectionStringHere)){var products connection.QueryAllProduct();foreach (var product in products){Console.WriteLine(${product.Name} - {product.Price});}}}
}
7.SqlSugar 优点 1. 易用性 • SqlSugar 的 API 设计非常简洁易于上手适合快速开发。 2. 多数据库支持 • 支持多种主流数据库包括 MySQL、SQL Server、PostgreSQL、Oracle、SQLite、ClickHouse 等。 3. 丰富的特性 • 提供了诸如分页、事务管理、批量操作、动态表名等功能并且支持复杂的查询构建。 4. 良好的文档和支持 • 官方文档详尽提供了大量的示例代码和教程便于学习和使用。 5. 扩展性强 • 可以通过插件或扩展包如 SqlSugar.ClickHouseCore轻松扩展功能。 6. 性能优化 • 提供了一些性能优化选项如缓存机制和异步操作。 缺点 1. 某些高级功能不够完善 • 虽然 SqlSugar 功能丰富但在某些高级功能上可能不如 FreeSQL 强大。 2. 社区活跃度稍低 • 相比 FreeSQLSqlSugar 的社区活跃度略低但仍然有较好的支持。
using SqlSugar;
using Microsoft.Extensions.Configuration;
using System;
using System.IO;
using System.Linq;namespace SqlSugarClickHouseExample
{[SugarTable(orders)]public class Order{[SugarColumn(IsPrimaryKey true, IsIdentity true)]public int Id { get; set; }public DateTime OrderDate { get; set; }public int CustomerId { get; set; }public int ProductId { get; set; }public int Quantity { get; set; }public decimal Price { get; set; }}class Program{static void Main(string[] args){// 读取配置文件var configuration new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile(appsettings.json, optional: false, reloadOnChange: true).Build();// 获取连接字符串var connectionString configuration.GetConnectionString(Default);// 创建 SqlSugarClient 实例var db new SqlSugarClient(new ConnectionConfig(){ConnectionString connectionString,DbType DbType.ClickHouse,IsAutoCloseConnection true});// 插入数据var order new Order{OrderDate DateTime.Now,CustomerId 1,ProductId 101,Quantity 2,Price 19.99m};db.Insertable(order).ExecuteCommand();// 查询数据var orders db.QueryableOrder().Where(o o.OrderDate new DateTime(2023, 1, 1)).OrderByDescending(o o.OrderDate).ToList();foreach (var item in orders){Console.WriteLine($Order ID: {item.Id}, Order Date: {item.OrderDate}, Customer ID: {item.CustomerId}, Product ID: {item.ProductId}, Quantity: {item.Quantity}, Price: {item.Price});}// 更新数据order.Quantity 3;db.Updateable(order).ExecuteCommand();// 删除数据db.DeleteableOrder().InSingle(order.Id).ExecuteCommand();}}
}
8.FreeSQL 优点 1. 高性能 • FreeSQL 在查询生成和执行方面进行了大量优化提供了高效的数据库操作。 2. 多数据库支持 • 支持多种主流数据库如 MySQL、SQL Server、PostgreSQL、SQLite 等。 3. 丰富的特性 • 提供了诸如分页、事务管理、批量操作等常用功能并且支持复杂的查询构建。 4. 活跃的社区 • 拥有一个活跃的开发者社区能够及时获得支持和更新。 5. 代码生成器 • 内置了强大的代码生成工具可以自动生成实体类和 CRUD 操作代码。 缺点 1. 学习曲线 • 对于初学者来说可能需要一些时间来熟悉其 API 和配置。 2. 文档相对较少 • 相比 SqlSugarFreeSQL 的官方文档和示例代码相对较少。
示例代码
using FreeSql;
using Microsoft.Extensions.Configuration;
using System;
using System.IO;
using System.Linq;namespace FreeSqlClickHouseExample
{[Table(Name orders)]public class Order{[Column(IsPrimary true, IsIdentity true)]public int Id { get; set; }public DateTime OrderDate { get; set; }public int CustomerId { get; set; }public int ProductId { get; set; }public int Quantity { get; set; }public decimal Price { get; set; }}class Program{static void Main(string[] args){// 读取配置文件var configuration new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile(appsettings.json, optional: false, reloadOnChange: true).Build();// 获取连接字符串var connectionString configuration.GetConnectionString(Default);// 创建 FreeSql 实例var fsql new FreeSqlBuilder().UseConnectionString(DataType.ClickHouse, connectionString).Build();// 插入数据var order new Order{OrderDate DateTime.Now,CustomerId 1,ProductId 101,Quantity 2,Price 19.99m};fsql.Insert(order).ExecuteAffrows();// 查询数据var orders fsql.SelectOrder().Where(o o.OrderDate new DateTime(2023, 1, 1)).OrderByDescending(o o.OrderDate).ToList();foreach (var item in orders){Console.WriteLine($Order ID: {item.Id}, Order Date: {item.OrderDate}, Customer ID: {item.CustomerId}, Product ID: {item.ProductId}, Quantity: {item.Quantity}, Price: {item.Price});}// 更新数据order.Quantity 3;fsql.UpdateOrder().SetSource(order).ExecuteAffrows();// 删除数据fsql.DeleteOrder().Where(o o.Id order.Id).ExecuteAffrows();}}
}
配置文件示例 (appsettings.json)
{ConnectionStrings: {Default: Host127.0.0.1;Port9000;Usernamedefault;Password;Databasedefault},FreeSql: {Connections: {Default: {ConnectionString: Host127.0.0.1;Port9000;Usernamedefault;Password;Databasedefault,DbType: ClickHouse}}}
}
总结 • Entity Framework适合大多数 .NET 项目特别是需要快速开发和维护的场景。 • Dapper适合需要高性能和灵活查询的场景尤其是高并发应用。 • NHibernate适合需要复杂映射和高级功能的大型项目。 • LLBLGen Pro适合需要专业级功能和性能优化的商业项目。 • NPoco 和 RepoDb适合需要轻量级和高性能的场景介于 Dapper 和 EF 之间。
• FreeSQL 适合需要高性能和复杂功能的大型项目。 • SqlSugar 适合需要快速开发和保持代码简洁的中小型项目。