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 正在以快速演进的方式在更新,请求献上宝贵的一星,谢谢!

github: https://github.com/2881099/FreeSql

FreeSql.DbContext 第二个版本介绍的更多相关文章

  1. 已实现乐观锁功能,FreeSql.DbContext 准备起航

    上回说到 FreeSql.DbContext 的规则,以及演示它的执行过程,可惜当时还不支持"乐观锁",对于更新数据来讲并不安全. FreeSql 核心库 v0.3.27 已提供乐 ...

  2. mysql学习之-三种安装方式与版本介绍

    MYSQL版本介绍 mysql分alpha,beta,rc,GA四个版本. alpha  暗示这是一个以展示新特性为目的的版本,存在比较多的不稳定因素,还会向代码中添加新新特性beta 以后的beta ...

  3. python学习第二讲,pythonIDE介绍以及配置使用

    目录 python学习第二讲,pythonIDE介绍以及配置使用 一丶集成开发环境IDE简介,以及配置 1.简介 2.PyCharm 介绍 3.pycharm 的安装 二丶IDE 开发Python,以 ...

  4. CentOS6安装各种大数据软件 第一章:各个软件版本介绍

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  5. Spring Cloud Alibaba发布第二个版本,Spring 发来贺电

    还是熟悉的面孔,还是熟悉的味道,不同的是,这次的配方升级了. 今年10月底,Spring Cloud联合创始人Spencer Gibb在Spring官网的博客页面宣布:阿里巴巴开源 Spring Cl ...

  6. Windwos应急响应和系统加固(1)——Windwos操作系统版本介绍

    Windwos操作系统版本介绍 1. Micorsoft  Windows XP  ·Microsoft官方发布时间以及终止提供服务时间:2001.10.25-2014.4.8   产生漏洞:MS08 ...

  7. Xamarin Android教程Android基本知识版本介绍与系统介绍

    Xamarin Android教程Android基本知识版本介绍与系统介绍 Xamarin Android教程Android基本知识版本介绍与系统介绍,开发Andriod有时候不像iOS一样轻松,因为 ...

  8. Cloudera Hadoop什么是CDH及CDH版本介绍

    本文引用自:Cloudera Hadoop什么是CDH及CDH版本介绍http://www.aboutyun.com/thread-6788-1-1.html(出处: about云开发) 云技术新兴的 ...

  9. Hadoop发行版本介绍

    前言 从2011年开始,中国进入大数据风起云涌的时代,以Hadoop为代表的家族软件,占据了大数据处理的广阔地盘.开源界及厂商,所有数据软件,无一不向Hadoop靠拢.Hadoop也从小众的高富帅领域 ...

随机推荐

  1. STL-Vector源码剖析

    G++ ,cygnus\cygwin-b20\include\g++\stl_vector.h 完整列表 /* * * Copyright (c) 1994 * Hewlett-Packard Com ...

  2. win10汇编环境的搭建

    第一步:下载DOSBox0.74-win32-installer 可以去官网:http://www.dosbox.com/ 或者链接:https://pan.baidu.com/s/1UA77qTLO ...

  3. Windows系统下 Python(Anaconda)的 Dlib库 的安装

    0.引言 介绍 Windows 10 64位系统下,利用 Anaconda 开发环境,在python中安装 Dlib库 : windows下dlib的安装十分不友好,所以在这里分享下安装过程: win ...

  4. 第七章 mysql 事务索引以及触发器,视图等等,很重要又难一点点的部分

    [索引] 帮助快速查询 MyISAM ,InnoDB支持btree索引 Memory 支持 btree和hash索引 存储引擎支持 每个表至少16个索引   总索引长度至少256字节   创建索引的优 ...

  5. python_选择结构

    >>> if 3>2:print('ok') ok>>> if True:print(3);print(5) >>> chTesst=['1 ...

  6. Proxy是在什么时候调用InvocationHandler的invoke方法的

    最近看到spring的动态代理,扒到深处看到时 Proxy.newProxyInstance(classLoader, proxiedInterfaces, this);看到这一句,顿时比较懵逼,还是 ...

  7. SQL语句的CRUD

    一.基础 .说明:创建数据库 CREATE DATABASE database-name .说明:删除数据库 drop database dbname .说明:备份sql server --- 创建 ...

  8. grub rescue 主引导修复

    使用windows 和 ubuntu 双系统的人,很有可能碰到重装某一个系统,或者另外添加分区,导致系统重启出现 : GRUB loading error:unknow filesystem grub ...

  9. Struts标签库详解【3】

    struts2标签库详解 要在jsp中使用Struts2的标志,先要指明标志的引入.通过jsp的代码的顶部加入以下的代码: <%@taglib prefix="s" uri= ...

  10. struct和union的区别

    1)union是几个不同类型的变量共占一段内存(相互覆盖):struct是把不同类型的数据组合成一个整体 2)对齐方式略有区别:union不需要+,只需要拿出对齐后的最长 structure unio ...