FreeSql.DbContext 添加 更新 删除 添加或更新 保存实体的指定 ManyToMany/OneToMany 导航属性(完整对比) 场景:在关闭级联保存功能之后,手工使用本方法 例子:保存商品的 OneToMany 集合属性,SaveMany(goods, "Skus") 当 goods.Skus 为空(非null)时,会删除表中已存在的所有数据 当 goods.Skus 不为空(非null)时,添加/更新后,删除表中不存在 Skus 集合属性的所有记录 实体对象 属性名 附加实体,可用于不查询就更新或删除 附加实体,并且只附加主键值,可用于不更新属性值为null或默认值的字段 Type = Update 的时候,获取更新之前的对象 实体变化记录 实体变化事件 刷新队列中的命令 是否开启一对多,多对多级联保存功能 【一对多】模型下, 保存时可级联保存实体的属性集合。出于使用安全考虑我们没做完整对比,只实现实体属性集合的添加或更新操作,所以不会删除实体属性集合的数据。 完整对比的功能使用起来太危险,试想下面的场景: - 保存的时候,实体的属性集合是空的,如何操作?记录全部删除? - 保存的时候,由于数据库中记录非常之多,那么只想保存子表的部分数据,或者只需要添加,如何操作? 【多对多】模型下,我们对中间表的保存是完整对比操作,对外部实体的操作只作新增(*注意不会更新) - 属性集合为空时,删除他们的所有关联数据(中间表) - 属性集合不为空时,与数据库存在的关联数据(中间表)完全对比,计算出应该删除和添加的记录 使用无参数化设置(对应 IInsert/IUpdate) 是否开启 IFreeSql GlobalFilter 功能(默认:true) 实体变化事件 动态Type,在使用 DbSet<object> 后使用本方法,指定实体类型 附加实体,可用于不查询就更新或删除 附加实体,并且只附加主键值,可用于不更新属性值为null或默认值的字段 清空状态数据 添加 保存实体的指定 ManyToMany/OneToMany 导航属性(完整对比) 场景:在关闭级联保存功能之后,手工使用本方法 例子:保存商品的 OneToMany 集合属性,SaveMany(goods, "Skus") 当 goods.Skus 为空(非null)时,会删除表中已存在的所有数据 当 goods.Skus 不为空(非null)时,添加/更新后,删除表中不存在 Skus 集合属性的所有记录 实体对象 属性名 更新 删除 根据 lambda 条件删除数据 添加或更新 开始编辑数据,然后调用方法 EndEdit 分析出添加、修改、删除 SQL 语句进行执行 场景:winform 加载表数据后,一顿添加、修改、删除操作之后,最后才点击【保存】 示例:https://github.com/dotnetcore/FreeSql/issues/397 注意:* 本方法只支持单表操作,不支持导航属性级联保存 完成编辑数据,进行保存动作 该方法根据 BeginEdit 传入的数据状态分析出添加、修改、删除 SQL 语句 注意:* 本方法只支持单表操作,不支持导航属性级联保存 可选参数:手工传递最终的 data 值进行对比默认:如果不传递,则使用 BeginEdit 传入的 data 引用进行对比 使用 FreeSql FluentApi 方法,当 EFCore FluentApi 方法无法表示的时候使用 使用 FreeSql FluentApi 方法,当 EFCore FluentApi 方法无法表示的时候使用 使用 Repository + EnableAddOrUpdateNavigateList + NoneParameter 方式插入种子数据 使用 FreeSql FluentApi 方法,当 EFCore FluentApi 方法无法表示的时候使用 使用 Repository + EnableAddOrUpdateNavigateList + NoneParameter 方式插入种子数据 在工作单元内创建默认仓库类,工作单元下的仓储操作具有事务特点 数据过滤 + 验证 在工作单元内创建联合主键的仓储类,工作单元下的仓储操作具有事务特点 数据过滤 + 验证 在工作单元内创建仓库类,工作单元下的仓储操作具有事务特点 数据过滤 + 验证 分表规则,参数:旧表名;返回:新表名 https://github.com/2881099/FreeSql/wiki/Repository 开启过滤器,若使用 using 则使用完后,恢复为原有状态 过滤器名称 开启所有过滤器,若使用 using 则使用完后,恢复为原有状态 禁用过滤器,若使用 using 则使用完后,恢复为原有状态 禁用所有过滤器,若使用 using 则使用完后,恢复为原有状态 动态Type,在使用 Repository<object> 后使用本方法,指定实体类型 分表规则,参数:旧表名;返回:新表名 https://github.com/2881099/FreeSql/wiki/Repository 设置 DbContext 选项 清空状态数据 附加实体,可用于不查询就更新或删除 附加实体,并且只附加主键值,可用于不更新属性值为null或默认值的字段 保存实体的指定 ManyToMany/OneToMany 导航属性(完整对比) 场景:在关闭级联保存功能之后,手工使用本方法 例子:保存商品的 OneToMany 集合属性,SaveMany(goods, "Skus") 当 goods.Skus 为空(非null)时,会删除表中已存在的所有数据 当 goods.Skus 不为空(非null)时,添加/更新后,删除表中不存在 Skus 集合属性的所有记录 实体对象 属性名 开始编辑数据,然后调用方法 EndEdit 分析出添加、修改、删除 SQL 语句进行执行 场景:winform 加载表数据后,一顿添加、修改、删除操作之后,最后才点击【保存】 示例:https://github.com/dotnetcore/FreeSql/issues/397 注意:* 本方法只支持单表操作,不支持导航属性级联保存 完成编辑数据,进行保存动作 该方法根据 BeginEdit 传入的数据状态分析出添加、修改、删除 SQL 语句 注意:* 本方法只支持单表操作,不支持导航属性级联保存 可选参数:手工传递最终的 data 值进行对比默认:如果不传递,则使用 BeginEdit 传入的 data 引用进行对比 工作单元 开启事务,或者返回已开启的事务 若未开启事务,则开启 是否启用工作单元 禁用工作单元 若已开启事务(已有Insert/Update/Delete操作),调用此方法将发生异常,建议在执行逻辑前调用 开启工作单元 工作单元内的实体变化跟踪 正在使用中的工作单元(调试) 开启事务后有值,是 UnitOfWork 的唯一标识 格式:yyyyMMdd_HHmmss_种子id 例如:20191121_214504_1 工作单元管理器 当前的工作单元 将仓储的事务交给我管理 创建工作单元 事务传播方式 事务隔离级别 事务传播方式 如果当前没有事务,就新建一个事务,如果已存在一个事务中,加入到这个事务中,默认的选择。 支持当前事务,如果没有当前事务,就以非事务方法执行。 使用当前事务,如果没有当前事务,就抛出异常。 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 以非事务方式执行操作,如果当前事务存在则抛出异常。 以嵌套事务方式执行。 错误的命名,请使用 Required,在 2.0.0 删除 EFCore 95% 相似的 FluentApi 扩展方法 EFCore 95% 相似的 FluentApi 扩展方法 实体类型 创建普通数据上下文档对象 不跟踪查询的实体数据(在不需要更新其数据时使用),可提升查询性能 设置 DbContext 选项设置 返回默认仓库类 数据过滤 + 验证 返回默认仓库类,适用联合主键的仓储类 数据过滤 + 验证 返回仓库类 数据过滤 + 验证 分表规则,参数:旧表名;返回:新表名 https://github.com/2881099/FreeSql/wiki/Repository 创建基于仓储功能的工作单元,务必使用 using 包含使用