mirror of
https://github.com/dotnetcore/FreeSql.git
synced 2026-02-04 15:30:53 +08:00
update
@@ -1,5 +1,12 @@
|
||||
FreeSql.DbContext 实现类似 EFCore 使用习惯,跟踪对象状态,最终通过 SaveChanges 方法提交事务。
|
||||
|
||||
## 特性
|
||||
|
||||
- Select/Attach 快照对象,Update 只更新变化的字段;
|
||||
- Add/AddRange 插入数据,适配各数据库优化执行 ExecuteAffrows/ExecuteIdentity/ExecuteInserted;
|
||||
- AddOrUpdate 插入或更新;
|
||||
- SaveMany 方法快速保存导航对象(一对多、多对多);
|
||||
|
||||
## 安装
|
||||
|
||||
> dotnet add package FreeSql.DbContext
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
FreeSql.Repository 作为扩展,实现了通用仓储层功能。与其他规范标准一样,仓储层也有相应的规范定义。FreeSql.Repository 参考 abp vnext 接口,定义和实现基础的仓储层(CURD),应该算比较通用的方法吧。
|
||||
|
||||
## 特性
|
||||
|
||||
- Select/Attach 快照对象,Update 只更新变化的字段;
|
||||
- Insert 插入数据,适配各数据库优化执行 ExecuteAffrows/ExecuteIdentity/ExecuteInserted;
|
||||
- InsertOrUpdate 插入或更新;
|
||||
- SaveMany 方法快速保存导航对象(一对多、多对多);
|
||||
|
||||
## 安装
|
||||
|
||||
> dotnet add package FreeSql.Repository
|
||||
@@ -62,6 +69,29 @@ public SongsController(GuidRepository<Song> repos1) {
|
||||
|
||||
更多资料:[《过滤器、全局过滤器》](https://github.com/2881099/FreeSql/wiki/%e8%bf%87%e6%bb%a4%e5%99%a8)
|
||||
|
||||
## 状态管理
|
||||
|
||||
只更新变化的属性:
|
||||
```csharp
|
||||
var repo = fsql.GetRepository<Topic>();
|
||||
var item = repo.Where(a => a.Id == 1).First(); //此时快照 item
|
||||
item.Title = "newtitle";
|
||||
repo.Update(item); //对比快照时的变化
|
||||
//UPDATE `tb_topic` SET `Title` = ?p_0
|
||||
//WHERE (`Id` = 1)
|
||||
```
|
||||
|
||||
是不是觉得先查询再更新,啰嗦?
|
||||
```csharp
|
||||
var repo = fsql.GetRepository<Topic>();
|
||||
var item = new Topic { Id = 1 };
|
||||
repo.Attach(item); //此时快照 item
|
||||
item.Title = "newtitle";
|
||||
repo.Update(item); //对比快照时的变化
|
||||
//UPDATE `tb_topic` SET `Title` = ?p_0
|
||||
//WHERE (`Id` = 1)
|
||||
```
|
||||
|
||||
## 过滤与验证
|
||||
|
||||
假设我们有User(用户)、Topic(主题)两个实体,在领域类中定义了两个仓储:
|
||||
|
||||
25
修改.md
25
修改.md
@@ -60,6 +60,31 @@ fsql.Update<Topic>(1).Set(a => new Topic
|
||||
```
|
||||
|
||||
## 2、更新实体
|
||||
|
||||
方法1:(推荐)
|
||||
|
||||
> 只更新变化的属性,依赖 FreeSql.Repository
|
||||
```csharp
|
||||
var repo = fsql.GetRepository<Topic>();
|
||||
var item = repo.Where(a => a.Id == 1).First(); //此时快照 item
|
||||
item.Title = "newtitle";
|
||||
repo.Update(item); //对比快照时的变化
|
||||
//UPDATE `tb_topic` SET `Title` = ?p_0
|
||||
//WHERE (`Id` = 1)
|
||||
```
|
||||
|
||||
> 是不是觉得先查询再更新,啰嗦?
|
||||
```csharp
|
||||
var repo = fsql.GetRepository<Topic>();
|
||||
var item = new Topic { Id = 1 };
|
||||
repo.Attach(item); //此时快照 item
|
||||
item.Title = "newtitle";
|
||||
repo.Update(item); //对比快照时的变化
|
||||
//UPDATE `tb_topic` SET `Title` = ?p_0
|
||||
//WHERE (`Id` = 1)
|
||||
```
|
||||
|
||||
方法2:(原始)
|
||||
```csharp
|
||||
var item = new Topic { Id = 1, Title = "newtitle" };
|
||||
fsql.Update<Topic>()
|
||||
|
||||
Reference in New Issue
Block a user