博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FreeSql.DbContext 第二个版本介绍
阅读量:5337 次
发布时间:2019-06-15

本文共 2723 字,大约阅读时间需要 9 分钟。

FreeSql.DbContext 实现类似 EFCore 使用方法,跟踪对象状态,最终通过 SaveChanges 方法提交事务。

目前是第二个初版,已实现状态跟踪保存(导航属性的跟踪暂时不支持)。

另外还缺少 rowversion 行锁机制,这个现实好就可以在项目中使用了。

安装

dotnet add package FreeSql.DbContext

如何使用

1、在 OnConfiguring 方法上配置与 IFreeSql 关联。

说明:DbContext、DbSet 是 FreeSql 命名空间下的类。

public class SongContext : DbContext {    public DbSet
Songs { get; set; } public DbSet
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
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
Songs { get; set; } public virtual ICollection
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
(Fsql); services.AddFreeDbContext
(options => options.UseFreeSql(Fsql));}

在 mvc 中获取:

IFreeSql _orm;public ValuesController(SongContext songContext) {}

优先级

OnConfiguring > AddFreeDbContext

说明

  • DbContext 操作的数据在最后 SaveChanges 时才批量保存;
  • DbContext 内所有操作,使用同一个事务;
  • 当实体存在自增时,或者 Add/AddRange 的时候主键值为空,会提前开启事务;
  • 支持同步/异步方法;

FreeSql 其他资料

结束语

DbContext SaveChanges 性能测试结果挺可观,待完善之日再发一篇专门的性能测试文章。

FreeSql 正在以快速演进的方式在更新,请求献上宝贵的一星,谢谢!

github:

转载于:https://www.cnblogs.com/kellynic/p/10570948.html

你可能感兴趣的文章
Ubuntu改坏sudoers后无法使用sudo的解决办法
查看>>
NEYC 2017 游记
查看>>
[搬运] 写给 C# 开发人员的函数式编程
查看>>
Python之旅Day14 JQuery部分
查看>>
core--线程池
查看>>
redux-effect
查看>>
Swift和OC混编
查看>>
Android轻量级的开源缓存框架ASimpleCache
查看>>
他山之石:加载图片的一个小问题
查看>>
shell - 常识
查看>>
mssql sqlserver 使用sql脚本 清空所有数据库表数据的方法分享
查看>>
分层图最短路【bzoj2763】: [JLOI2011]飞行路线
查看>>
linux下编译复数类型引发的错误:expected unqualified-id before '(' token
查看>>
codeforces 1041A Heist
查看>>
字典常用方法
查看>>
Spring Cloud Stream消费失败后的处理策略(三):使用DLQ队列(RabbitMQ)
查看>>
bzoj1048 [HAOI2007]分割矩阵
查看>>
Java中的编码
查看>>
PKUWC2018 5/6
查看>>
As-If-Serial 理解
查看>>