FreeSql.DbContext 第二个版本介绍
2019-03-21 12:50
99 查看
FreeSql.DbContext 实现类似 EFCore 使用方法,跟踪对象状态,最终通过 SaveChanges 方法提交事务。
目前是第二个初版,已实现状态跟踪保存(导航属性的跟踪暂时不支持)。
另外还缺少 rowversion 行锁机制,这个现实好就可以在项目中使用了。
安装
dotnet add package FreeSql.DbContext
如何使用
1、在 OnConfiguring 方法上配置与 IFreeSql 关联。
说明:DbContext、DbSet 是 FreeSql 命名空间下的类。
public class SongContext : DbContext { public DbSet<Song> Songs { get; set; } public DbSet<Song> Tags { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder builder) { builder.UseFreeSql(dbcontext_01.Startup.Fsql); } } public class Song { [Column(IsIdentity = true)] public int Id { get; set; } public DateTime? Create_time { get; set; } public bool? Is_deleted { get; set; } public string Title { get; set; } public string Url { get; set; } public virtual ICollection<Tag> Tags { get; set; } } public class Song_tag { public int Song_id { get; set; } public virtual Song Song { get; set; } public int Tag_id { get; set; } public virtual Tag Tag { get; set; } } public class Tag { [Column(IsIdentity = true)] public int Id { get; set; } public int? Parent_id { get; set; } public virtual Tag Parent { get; set; } public decimal? Ddd { get; set; } public string Name { get; set; } public virtual ICollection<Song> Songs { get; set; } public virtual ICollection<Tag> Tags { get; set; } }
使用的时候与 EFCore 类似:
long id = 0; using (var ctx = new SongContext()) { var song = new Song { }; await ctx.Songs.AddAsync(song); id = song.Id; var adds = Enumerable.Range(0, 100) .Select(a => new Song { Create_time = DateTime.Now, Is_deleted = false, Title = "xxxx" + a, Url = "url222" }) .ToList(); await ctx.Songs.AddRangeAsync(adds); for (var a = 0; a < adds.Count; a++) adds[a].Title = "dkdkdkdk" + a; ctx.Songs.UpdateRange(adds); ctx.Songs.RemoveRange(adds.Skip(10).Take(20).ToList()); //ctx.Songs.Update(adds.First()); adds.Last().Url = "skldfjlksdjglkjjcccc"; ctx.Songs.Update(adds.Last()); //throw new Exception("回滚"); await ctx.SaveChangesAsync(); }
2、注入方式使用
public void ConfigureServices(IServiceCollection services) { services.AddSingleton<IFreeSql>(Fsql); services.AddFreeDbContext<SongContext>(options => options.UseFreeSql(Fsql)); }
在 mvc 中获取:
IFreeSql _orm; public ValuesController(SongContext songContext) { }
优先级
OnConfiguring > AddFreeDbContext
说明
- DbContext 操作的数据在最后 SaveChanges 时才批量保存;
- DbContext 内所有操作,使用同一个事务;
- 当实体存在自增时,或者 Add/AddRange 的时候主键值为空,会提前开启事务;
- 支持同步/异步方法;
FreeSql 其他资料
结束语
DbContext SaveChanges 性能测试结果挺可观,待完善之日再发一篇专门的性能测试文章。
FreeSql 正在以快速演进的方式在更新,请求献上宝贵的一星,谢谢!
相关文章推荐
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC dllname (FREE)从内存中上载指定的扩展存储过程 DLL
- sql官方版本介绍
- DBCC大全集之(适用版本MS SQLServer 2008 R2)----DBCC FREESESSIONCACHE刷新针对 Microsoft SQL Server 实例执行的分布式查询所使用的分
- 安装多个版本Sql时访问出错的原因
- MySQL优化2:SQL语句优化1-基本介绍
- Ubuntu各个版本的介绍
- jTDS官方介绍(OpenCms v6.2版MS Sqlserver数据库支持所用JDBC驱动)
- MyEclipse8.0与SVN版本工具集成及简单使用方法介绍
- MySQL 5.7.9版本sql_mode=only_full_group_by问题
- DirectX版本介绍
- SQLServer中游标实例介绍(转)
- MS-SQL 2005 组建和服务及工具介绍
- 让PDF.NET支持不同版本的SQL Server Compact数据库
- JavaScript版本迷局介绍
- [XMOVE自主设计的体感方案] 历代版本系统介绍(二)X-MOVE2.0
- ORACLE: 查看oracle的sqlplus版本的几个方法
- [XMOVE自主设计的体感方案] 历代版本系统介绍(三)X-MOVE3.0
- Visio 2010各版本介绍
- ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍 - [Oracle SQL]
- SWFObject 2.1以上版本语法介绍