FreeSql是一个功能强大的 .NET ORM 功能库,支持 .NetFramework 4.0+、.NetCore 2.1+、Xamarin 等支持 NetStandard 全部运行平台。html
以 MIT 开源协议托管于 github:https://github.com/2881099/FreeSqlgit
FreeSql 插入数据的方式有多种,这篇文章教你用最优的方案作数据插入功能。github
static IFreeSql fsql = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.Sqlite, "Data Source=db1.db") .UseAutoSyncStructure(true) //自动同步实体结构到数据库 .Build(); //请务一定义成 Singleton 单例模式 public class Blog { [Column(IsIdentity = true, IsPrimary = true)] public int BlogId { get; set; } public string Url { get; set; } public int Rating { get; set; } } var blog = new Blog { Url = "https://github.com/2881099/FreeSql", Rating = 5 };
若是表有自增列,插入数据后应该要返回 id。sql
方法1:(原始)数据库
long id = fsql.Insert(blog).ExecuteIdentity(); blog.Id = id;
方法2:(依赖 FreeSql.Repository)ide
var repo = fsql.GetRepository<Blog>(); repo.Insert(blog);
将插入后的自增值,填充给 blog.Id函数
方法3:(依赖 FreeSql.DbContext)性能
using (var ctx = fsql.CreateDbContext()) { ctx.Add(blog); ctx.SaveChanges(); }
将插入后的自增值,填充给 blog.Id学习
var items = new List<Topic>(); for (var a = 0; a < 10; a++) { items.Add(new Blog { Url = "https://github.com/2881099/FreeSql", Rating = 5 }); }
方法1:(原始)ui
fsql.Insert(items).ExecuteAffrows();
没法返回 items 全部 id 值
方法2:(依赖 FreeSql.Repository)
var repo = fsql.GetRepository<Blog>(); repo.Insert(items);
将插入后的自增值,填充给全部 items.Id
当操做的是 SqlServer/PostgreSql 数据库,此方法为一次执行,返回全部 id
当操做的是其余数据库,此方法为循环屡次执行,返回全部 id(注意性能问题)
针对 SqlServer/PostgreSQL/MySql 数据库,目前能在如下实现使用:
fsql.Insert(items).ExecuteSqlBulkCopy(); fsql.Insert(items).ExecutePgCopy(); fsql.Insert(items).ExecuteMySqlBulkCopy();
另外 IInsert 方法提供了 ToDataTable() 方法返回 DataTable 对象,让使用者本身封装 BulkCopy 操做。
DataTable dt = fsql.Insert(items) .InsertIdentity() //开启自增 id 插入 .ToDataTable();
注意:InsertIdentity() 的功能是生成 SQL 的时候有值,而不是调用 SET IDENTITY ON;
![]() |
《新人学习指引》 | 《Select》 | 《Update》 | 《Insert》 | 《Delete》 |
![]() |
《表达式函数》 | 《CodeFirst》 | 《DbFirst》 | 《BaseEntity》 |
![]() |
《Repository》 | 《UnitOfWork》 | 《过滤器》 | 《乐观锁》 | 《DbContext》 |
![]() |
《读写分离》 | 《分区分表》 | 《租户》 | 《AOP》 | 《黑科技》 | 更新日志 |