状态管理,可实现 Update 只更新变化的字段(不更新所有字段),灵活使用 Attach 和 Update 用起来非常舒服 。CRUD 模式三:DbContextFreeSql.DbContext 实现类似 EFCore 使用习惯,跟踪对象状态,最终通过 SaveChanges 方法提交事务 。
【C#.NET ORM 如何访问 Access 数据库 [FreeSql]】FreeSql 可自动识别 EFCore 实体特性 Key/Required/NotMapped/MaxLength/StringLength/DatabaseGenerated/Table/Column 。
- Select/Attach 快照对象,Update 只更新变化的字段;
- Add/AddRange 插入数据,适配各数据库优化执行 ExecuteAffrows/ExecuteIdentity/ExecuteInserted;
- AddOrUpdate 插入或更新;
- SaveMany 方法快速保存导航对象(一对多、多对多);
using (var ctx = DB.oracle.CreateDbContext()) {//var db1 = ctx.Set<Song>();//var db2 = ctx.Set<Tag>();var item = new Song { };ctx.Add(item);ctx.SaveChanges();}// 或者```csharppublic class SongContext : DbContext {public DbSet<Song> Songs { get; set; }public DbSet<Tag> Tags { get; set; }protected override void OnConfiguring(DbContextOptionsBuilder builder) {builder.UseFreeSql(DB.oracle);}//每个 DbContext 只触发一次protected override void OnModelCreating(ICodeFirst codefirst){codefirst.Entity<Song>(eb =>{eb.ToTable("tb_song");eb.Ignore(a => a.Field1);eb.Property(a => a.Title).HasColumnType("varchar(50)").IsRequired();eb.Property(a => a.Url).HasMaxLength(100);}}}
提示:FreeSql 兼容 EFCore 99% 的实体特性CRUD 模式四:BaseEntityBaseEntity 是一种极简单的 CodeFirst 开发方式,特别对单表或多表CRUD,利用继承节省了每个实体类的重复属性(创建时间、ID等字段),软件删除等功能,进行 crud 操作时不必时常考虑仓储的使用;
dotnet add package FreeSql.Extensions.BaseEntity
public class UserGroup : BaseEntity<UserGroup, int>{public string GroupName { get; set; }}//添加var item = new UserGroup { GroupName = "组一" };item.Insert();//更新item.GroupName = "组二";item.Update();//添加或更新item.Save();//软删除item.Delete();//恢复软删除item.Restore();//根据主键获取对象var item = UserGroup.Find(1);//查询数据var items = UserGroup.Where(a => a.Id > 10).ToList();
CRUD 模式五:SqlConnection 扩展方法(类似 Dapper)提供了类似 Dapper 的使用方法,FreeSql 增加了 IDbConnection/IDbTransaction 对象的扩展方法 Select/Insert/Update/Delete 实现 CRUD 。using FreeSql;using (var conn = new SqlConnection(...)){conn.Select<T>().Where(...).ToList();conn.Insert(new T {}).ExecuteAffrows();conn.Update().SetSource(new T {}).ExecuteAffrows();conn.InsertOrUpdate().SetSource(new T {}).ExecuteAffrows();conn.Delete<T>().Where(...).ExecuteAffrows();}
- 每个 SqlConnection GetFreeSql() 返回的 IFreeSql 实例相同;
- 可以对 fsql 设置 Aop 事件,比如监视 SQL;
- IFreeSql 自身的成员 IDbFirst、Transaction 不可用;
结束语作者是什么人?
作者是一个入行 18年的老批,他目前写的.net 开源项目有:
开源项目描述开源地址开源协议FreeIM聊天系统架构https://github.com/2881099/FreeIMMITFreeRedisRedis SDKhttps://github.com/2881099/FreeRedisMITcsredishttps://github.com/2881099/csredisMITFightLandlord斗DI主网络版https://github.com/2881099/FightLandlord学习用途FreeScheduler定时任务https://github.com/2881099/FreeSchedulerMITIdleBus空闲容器https://github.com/2881099/IdleBusMITFreeSqlORMhttps://github.com/dotnetcore/FreeSqlMITFreeSql.Cloud分布式tcc/sagahttps://github.com/2881099/FreeSql.CloudMITFreeSql.AdminLTE低代码后台生成https://github.com/2881099/FreeSql.AdminLTEMITFreeSql.DynamicProxy动态代理https://github.com/2881099/FreeSql.DynamicProxy学习用途需要的请拿走,这些都是最近几年的开源作品,以前更早写的就不发了 。
经验总结扩展阅读
- 如何安装摩托车轮胎气门芯
- 可可脂和代可可脂有什么区别 可可脂和代可可脂如何区分
- 把肉泡在水里解冻好吗 冻肉如何解冻
- 复合弓窥孔五针瞄安装时如何定位
- 如何增加桃花运巨蟹座
- qq如何用微信登录
- 如何为男士挑选衬衫
- 如何做关于月亮的书签
- 如何评价现代的lafesta
- 小孩鞋子如何选择尺码