This commit is contained in:
2881099 2022-04-29 12:32:11 +08:00
parent b320d084fa
commit 10d9090fb4
5 changed files with 189 additions and 116 deletions

View File

@ -10,7 +10,7 @@
</PropertyGroup>
<PropertyGroup>
<Version>3.2.602</Version>
<Version>3.2.603</Version>
</PropertyGroup>
<ItemGroup>

View File

@ -125,7 +125,7 @@ namespace FreeSql
await AddOrUpdateNavigateListAsync(item, true, null, cancellationToken);
return;
default:
if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1)
if (_tableIdentitys.Length == 1)
{
foreach (var s in data)
await AddPrivAsync(s, false, cancellationToken);

View File

@ -128,7 +128,7 @@ namespace FreeSql
AddOrUpdateNavigateList(item, true, null);
return;
default:
if (_tableIdentitys.Length == 1 && _tableReturnColumns.Length == 1)
if (_tableIdentitys.Length == 1)
{
foreach (var s in data)
AddPriv(s, false);

View File

@ -538,5 +538,14 @@
<param name="that"></param>
<returns></returns>
</member>
<member name="M:Microsoft.Extensions.DependencyInjection.FreeSqlRepositoryDependencyInjection.AddFreeRepository(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{FreeSql.FluentDataFilter},System.Reflection.Assembly[])">
<summary>
批量注入 Repository可以参考代码自行调整
</summary>
<param name="services"></param>
<param name="globalDataFilter"></param>
<param name="assemblies"></param>
<returns></returns>
</member>
</members>
</doc>

View File

@ -1,4 +1,4 @@
using FreeSql.DataAnnotations;
using FreeSql.DataAnnotations;
using System;
using System.Collections.Generic;
using System.Linq;
@ -10,7 +10,7 @@ namespace FreeSql.Tests
public class RepositoryTests
{
/// <summary>
/// 更一条无法更新。
/// 更一条无法更新。
/// </summary>
/// <returns></returns>
[Fact]
@ -70,12 +70,12 @@ namespace FreeSql.Tests
repos.Attach(item);
item.Title = "xxx";
repos.Update(item); //这行执行 UPDATE "AddUpdateInfo" SET "Title" = 'xxx' WHERE("Id" = '1942fb53-9700-411d-8895-ce4cecdf3257')
repos.Update(item); //这行执行 UPDATE "AddUpdateInfo" SET "Title" = 'xxx' WHERE("Id" = '1942fb53-9700-411d-8895-ce4cecdf3257')
Console.WriteLine(Newtonsoft.Json.JsonConvert.SerializeObject(item));
repos.Update(item); //这行不执行 SQL未变化
repos.Update(item); //这行不执行 SQL未变化
repos.AttachOnlyPrimary(item).Update(item); //这行更新状态值,只有主键值存在,执行更新 set title = xxx
repos.AttachOnlyPrimary(item).Update(item); //这行更新状态值,只有主键值存在,执行更新 set title = xxx
Console.WriteLine(repos.UpdateDiy.Where(a => a.Id == item.Id).Set(a => a.Clicks + 1).ToSql());
repos.UpdateDiy.Where(a => a.Id == item.Id).Set(a => a.Clicks + 1).ExecuteAffrows();
@ -140,7 +140,7 @@ namespace FreeSql.Tests
var flowRepos = fsql.GetRepository<FlowModel>();
flowRepos.Insert(flow);
//事务添加
//事务添加
flow = new FlowModel()
{
CreateTime = DateTime.Now,
@ -192,7 +192,7 @@ namespace FreeSql.Tests
var uowFlowRepos = uow.GetRepository<FlowModel>();
uowFlowRepos.Insert(flow);
uowFlowRepos.Orm.Select<FlowModel>().ToList();
//不调用commit将不会提交数据库更改
//不调用commit将不会提交数据库更改
//uow.Commit();
}
Assert.False(flowRepos.Select.Any(a => a.UserId == 1 && a.Name == "aaa"));
@ -241,36 +241,36 @@ namespace FreeSql.Tests
var cts = new[] {
new Cagetory
{
Name = "分类1",
Name = "分类1",
Goodss = new List<Goods>(new[]
{
new Goods { Name = "商品1" },
new Goods { Name = "商品2" },
new Goods { Name = "商品3" }
new Goods { Name = "商品1" },
new Goods { Name = "商品2" },
new Goods { Name = "商品3" }
})
},
new Cagetory
{
Name = "分类2",
Name = "分类2",
Goodss = new List<Goods>(new[]
{
new Goods { Name = "商品4" },
new Goods { Name = "商品5" }
new Goods { Name = "商品4" },
new Goods { Name = "商品5" }
})
}
};
repo.Insert(cts);
cts[0].Name = "分类11";
cts[0].Name = "分类11";
cts[0].Goodss.Clear();
cts[1].Name = "分类22";
cts[1].Name = "分类22";
cts[1].Goodss.Clear();
repo.Update(cts);
cts[0].Name = "分类111";
cts[0].Name = "分类111";
cts[0].Goodss.Clear();
cts[0].Goodss.Add(new Goods { Name = "商品33" });
cts[1].Name = "分类222";
cts[0].Goodss.Add(new Goods { Name = "商品33" });
cts[1].Name = "分类222";
cts[1].Goodss.Clear();
cts[1].Goodss.Add(new Goods { Name = "商品55" });
cts[1].Goodss.Add(new Goods { Name = "商品55" });
repo.Update(cts);
var cts2 = repo.Select.WhereDynamic(cts).IncludeMany(a => a.Goodss).ToList();
@ -304,36 +304,36 @@ namespace FreeSql.Tests
var cts = new[] {
new CagetoryLD
{
Name = "分类1",
Name = "分类1",
Goodss = new List<GoodsLD>(new[]
{
new GoodsLD { Name = "商品1" },
new GoodsLD { Name = "商品2" },
new GoodsLD { Name = "商品3" }
new GoodsLD { Name = "商品1" },
new GoodsLD { Name = "商品2" },
new GoodsLD { Name = "商品3" }
})
},
new CagetoryLD
{
Name = "分类2",
Name = "分类2",
Goodss = new List<GoodsLD>(new[]
{
new GoodsLD { Name = "商品4" },
new GoodsLD { Name = "商品5" }
new GoodsLD { Name = "商品4" },
new GoodsLD { Name = "商品5" }
})
}
};
repo.Insert(cts);
cts[0].Name = "分类11";
cts[0].Name = "分类11";
cts[0].Goodss.Clear();
cts[1].Name = "分类22";
cts[1].Name = "分类22";
cts[1].Goodss.Clear();
repo.Update(cts);
cts[0].Name = "分类111";
cts[0].Name = "分类111";
cts[0].Goodss.Clear();
cts[0].Goodss.Add(new GoodsLD { Name = "商品33" });
cts[1].Name = "分类222";
cts[0].Goodss.Add(new GoodsLD { Name = "商品33" });
cts[1].Name = "分类222";
cts[1].Goodss.Clear();
cts[1].Goodss.Add(new GoodsLD { Name = "商品55" });
cts[1].Goodss.Add(new GoodsLD { Name = "商品55" });
repo.Update(cts);
var cts2 = repo.Select.WhereDynamic(cts).IncludeMany(a => a.Goodss).ToList();
@ -369,52 +369,52 @@ namespace FreeSql.Tests
public void SaveMany_OneToMany()
{
var repo = g.sqlite.GetRepository<Cagetory>();
repo.DbContextOptions.EnableAddOrUpdateNavigateList = false; //关闭级联保存功能
repo.DbContextOptions.EnableAddOrUpdateNavigateList = false; //关闭级联保存功能
var cts = new[] {
new Cagetory
{
Name = "分类1",
Name = "分类1",
Goodss = new List<Goods>(new[]
{
new Goods { Name = "商品1" },
new Goods { Name = "商品2" },
new Goods { Name = "商品3" }
new Goods { Name = "商品1" },
new Goods { Name = "商品2" },
new Goods { Name = "商品3" }
})
},
new Cagetory
{
Name = "分类2",
Name = "分类2",
Goodss = new List<Goods>(new[]
{
new Goods { Name = "商品4" },
new Goods { Name = "商品5" }
new Goods { Name = "商品4" },
new Goods { Name = "商品5" }
})
}
};
repo.Insert(cts);
repo.SaveMany(cts[0], "Goodss"); //指定保存 Goodss 一对多属性
repo.SaveMany(cts[1], "Goodss"); //指定保存 Goodss 一对多属性
repo.SaveMany(cts[0], "Goodss"); //指定保存 Goodss 一对多属性
repo.SaveMany(cts[1], "Goodss"); //指定保存 Goodss 一对多属性
cts[0].Goodss.RemoveAt(1);
cts[1].Goodss.RemoveAt(1);
repo.SaveMany(cts[0], "Goodss"); //指定保存 Goodss 一对多属性
repo.SaveMany(cts[1], "Goodss"); //指定保存 Goodss 一对多属性
repo.SaveMany(cts[0], "Goodss"); //指定保存 Goodss 一对多属性
repo.SaveMany(cts[1], "Goodss"); //指定保存 Goodss 一对多属性
cts[0].Name = "分类11";
cts[0].Name = "分类11";
cts[0].Goodss.Clear();
cts[1].Name = "分类22";
cts[1].Name = "分类22";
cts[1].Goodss.Clear();
repo.Update(cts);
repo.SaveMany(cts[0], "Goodss"); //指定保存 Goodss 一对多属性
repo.SaveMany(cts[1], "Goodss"); //指定保存 Goodss 一对多属性
cts[0].Name = "分类111";
repo.SaveMany(cts[0], "Goodss"); //指定保存 Goodss 一对多属性
repo.SaveMany(cts[1], "Goodss"); //指定保存 Goodss 一对多属性
cts[0].Name = "分类111";
cts[0].Goodss.Clear();
cts[0].Goodss.Add(new Goods { Name = "商品33" });
cts[1].Name = "分类222";
cts[0].Goodss.Add(new Goods { Name = "商品33" });
cts[1].Name = "分类222";
cts[1].Goodss.Clear();
cts[1].Goodss.Add(new Goods { Name = "商品55" });
cts[1].Goodss.Add(new Goods { Name = "商品55" });
repo.Update(cts);
repo.SaveMany(cts[0], "Goodss"); //指定保存 Goodss 一对多属性
repo.SaveMany(cts[1], "Goodss"); //指定保存 Goodss 一对多属性
repo.SaveMany(cts[0], "Goodss"); //指定保存 Goodss 一对多属性
repo.SaveMany(cts[1], "Goodss"); //指定保存 Goodss 一对多属性
}
[Fact]
@ -425,42 +425,42 @@ namespace FreeSql.Tests
var cts = new[] {
new CagetoryParent
{
Name = "分类1",
Name = "分类1",
Childs = new List<CagetoryParent>(new[]
{
new CagetoryParent { Name = "分类1_1" },
new CagetoryParent { Name = "分类1_2" },
new CagetoryParent { Name = "分类1_3" }
new CagetoryParent { Name = "分类1_1" },
new CagetoryParent { Name = "分类1_2" },
new CagetoryParent { Name = "分类1_3" }
})
},
new CagetoryParent
{
Name = "分类2",
Name = "分类2",
Childs = new List<CagetoryParent>(new[]
{
new CagetoryParent { Name = "分类2_1" },
new CagetoryParent { Name = "分类2_2" }
new CagetoryParent { Name = "分类2_1" },
new CagetoryParent { Name = "分类2_2" }
})
}
};
repo.DbContextOptions.EnableAddOrUpdateNavigateList = true; //打开级联保存功能
repo.DbContextOptions.EnableAddOrUpdateNavigateList = true; //打开级联保存功能
repo.Insert(cts);
var notreelist1 = repo.Select.ToList();
var treelist1 = repo.Select.ToTreeList();
//repo.SaveMany(cts[0], "Childs"); //指定保存 Childs 一对多属性
cts[0].Name = "分类11";
//repo.SaveMany(cts[0], "Childs"); //指定保存 Childs 一对多属性
cts[0].Name = "分类11";
cts[0].Childs.Clear();
cts[1].Name = "分类22";
cts[1].Name = "分类22";
cts[1].Childs.Clear();
repo.Update(cts);
cts[0].Name = "分类111";
cts[0].Name = "分类111";
cts[0].Childs.Clear();
cts[0].Childs.Add(new CagetoryParent { Name = "分类1_33" });
cts[1].Name = "分类222";
cts[0].Childs.Add(new CagetoryParent { Name = "分类1_33" });
cts[1].Name = "分类222";
cts[1].Childs.Clear();
cts[1].Childs.Add(new CagetoryParent { Name = "分类2_22" });
cts[1].Childs.Add(new CagetoryParent { Name = "分类2_22" });
repo.Update(cts);
var treelist2 = repo.Select.ToTreeList();
}
@ -479,16 +479,16 @@ namespace FreeSql.Tests
public void EnableAddOrUpdateNavigateList_ManyToMany()
{
var tags = new[] {
new Tag { TagName = "流行" },
new Tag { TagName = "80后" },
new Tag { TagName = "00后" },
new Tag { TagName = "摇滚" }
new Tag { TagName = "流行" },
new Tag { TagName = "80后" },
new Tag { TagName = "00后" },
new Tag { TagName = "摇滚" }
};
var ss = new[]
{
new Song
{
Name = "爱你一万年.mp3",
Name = "爱你一万年.mp3",
Tags = new List<Tag>(new[]
{
tags[0], tags[1]
@ -496,7 +496,7 @@ namespace FreeSql.Tests
},
new Song
{
Name = "李白.mp3",
Name = "李白.mp3",
Tags = new List<Tag>(new[]
{
tags[0], tags[2]
@ -504,23 +504,23 @@ namespace FreeSql.Tests
}
};
var repo = g.sqlite.GetRepository<Song>();
repo.DbContextOptions.EnableAddOrUpdateNavigateList = true; //打开级联保存功能
repo.DbContextOptions.EnableAddOrUpdateNavigateList = true; //打开级联保存功能
repo.Insert(ss);
ss[0].Tags[0].TagName = "流行101";
repo.SaveMany(ss[0], "Tags"); //指定保存 Tags 多对多属性
ss[0].Tags[0].TagName = "流行101";
repo.SaveMany(ss[0], "Tags"); //指定保存 Tags 多对多属性
ss[0].Name = "爱你一万年.mp5";
ss[0].Name = "爱你一万年.mp5";
ss[0].Tags.Clear();
ss[0].Tags.Add(tags[0]);
ss[1].Name = "李白.mp5";
ss[1].Name = "李白.mp5";
ss[1].Tags.Clear();
ss[1].Tags.Add(tags[3]);
repo.Update(ss);
ss[0].Name = "爱你一万年.mp4";
ss[0].Name = "爱你一万年.mp4";
ss[0].Tags.Clear();
ss[1].Name = "李白.mp4";
ss[1].Name = "李白.mp4";
ss[1].Tags.Clear();
repo.Update(ss);
}
@ -553,19 +553,19 @@ namespace FreeSql.Tests
g.sqlite.Delete<BeginEdit01>().Where("1=1").ExecuteAffrows();
var repo = g.sqlite.GetRepository<BeginEdit01>();
var cts = new[] {
new BeginEdit01 { Name = "分类1" },
new BeginEdit01 { Name = "分类1_1" },
new BeginEdit01 { Name = "分类1_2" },
new BeginEdit01 { Name = "分类1_3" },
new BeginEdit01 { Name = "分类2" },
new BeginEdit01 { Name = "分类2_1" },
new BeginEdit01 { Name = "分类2_2" }
new BeginEdit01 { Name = "分类1" },
new BeginEdit01 { Name = "分类1_1" },
new BeginEdit01 { Name = "分类1_2" },
new BeginEdit01 { Name = "分类1_3" },
new BeginEdit01 { Name = "分类2" },
new BeginEdit01 { Name = "分类2_1" },
new BeginEdit01 { Name = "分类2_2" }
}.ToList();
repo.Insert(cts);
repo.BeginEdit(cts);
cts.Add(new BeginEdit01 { Name = "分类2_3" });
cts.Add(new BeginEdit01 { Name = "分类2_3" });
cts[0].Name = "123123";
cts.RemoveAt(1);
@ -577,13 +577,13 @@ namespace FreeSql.Tests
repo.BeginEdit(cts);
cts.AddRange(new[] {
new BeginEdit01 { Name = "分类1" },
new BeginEdit01 { Name = "分类1_1" },
new BeginEdit01 { Name = "分类1_2" },
new BeginEdit01 { Name = "分类1_3" },
new BeginEdit01 { Name = "分类2" },
new BeginEdit01 { Name = "分类2_1" },
new BeginEdit01 { Name = "分类2_2" }
new BeginEdit01 { Name = "分类1" },
new BeginEdit01 { Name = "分类1_1" },
new BeginEdit01 { Name = "分类1_2" },
new BeginEdit01 { Name = "分类1_3" },
new BeginEdit01 { Name = "分类2" },
new BeginEdit01 { Name = "分类2_1" },
new BeginEdit01 { Name = "分类2_2" }
});
Assert.Equal(7, repo.EndEdit());
@ -600,19 +600,19 @@ namespace FreeSql.Tests
fsql.Delete<BeginEdit02>().Where("1=1").ExecuteAffrows();
var repo = fsql.GetRepository<BeginEdit02>();
var cts = new[] {
new BeginEdit02 { Name = "分类1" },
new BeginEdit02 { Name = "分类1_1" },
new BeginEdit02 { Name = "分类1_2" },
new BeginEdit02 { Name = "分类1_3" },
new BeginEdit02 { Name = "分类2" },
new BeginEdit02 { Name = "分类2_1" },
new BeginEdit02 { Name = "分类2_2" }
new BeginEdit02 { Name = "分类1" },
new BeginEdit02 { Name = "分类1_1" },
new BeginEdit02 { Name = "分类1_2" },
new BeginEdit02 { Name = "分类1_3" },
new BeginEdit02 { Name = "分类2" },
new BeginEdit02 { Name = "分类2_1" },
new BeginEdit02 { Name = "分类2_2" }
}.ToList();
repo.Insert(cts);
repo.BeginEdit(cts);
cts.Add(new BeginEdit02 { Name = "分类2_3" });
cts.Add(new BeginEdit02 { Name = "分类2_3" });
cts[0].Name = "123123";
cts.RemoveAt(1);
@ -624,13 +624,13 @@ namespace FreeSql.Tests
repo.BeginEdit(cts);
cts.AddRange(new[] {
new BeginEdit02 { Name = "分类1" },
new BeginEdit02 { Name = "分类1_1" },
new BeginEdit02 { Name = "分类1_2" },
new BeginEdit02 { Name = "分类1_3" },
new BeginEdit02 { Name = "分类2" },
new BeginEdit02 { Name = "分类2_1" },
new BeginEdit02 { Name = "分类2_2" }
new BeginEdit02 { Name = "分类1" },
new BeginEdit02 { Name = "分类1_1" },
new BeginEdit02 { Name = "分类1_2" },
new BeginEdit02 { Name = "分类1_3" },
new BeginEdit02 { Name = "分类2" },
new BeginEdit02 { Name = "分类2_1" },
new BeginEdit02 { Name = "分类2_2" }
});
Assert.Equal(7, repo.EndEdit());
@ -747,5 +747,69 @@ namespace FreeSql.Tests
public int id { get; set; }
public bool bool_val { get; set; }
}
[Fact]
public void InsertIdentity()
{
var fsql = g.mysql;
fsql.Delete<TaskDetailTeam>().Where("1=1").ExecuteAffrows();
var repo = fsql.GetRepository<TaskDetailTeam>();
var team = new TaskDetailTeam();
repo.Insert(team);
team = new TaskDetailTeam
{
TaskId = 1,
UserId = 11,
IsYanShou = 1,
AccessType = "xxxAccessType1"
};
repo.Insert(team);
var teams = new[]
{
new TaskDetailTeam
{
TaskId = 2,
UserId = 22,
IsYanShou = 2,
AccessType = "xxxAccessType2"
},new TaskDetailTeam
{
TaskId = 3,
UserId = 33,
IsYanShou = 3,
AccessType = "xxxAccessType3"
}
};
repo.Insert(teams);
}
[Table(Name = "task_detail_team")]
public class TaskDetailTeam
{
[Column(Name = "id", IsPrimary = true, IsIdentity = true)]
public int Id { get; set; }
[Column(Name = "createdAt", DbType = "datetime", ServerTime = DateTimeKind.Local, CanUpdate = false)]
public DateTime CreatedAt { get; set; }
[Column(Name = "taskId")]
public int TaskId { get; set; }
[Column(Name = "updatedAt", DbType = "datetime", ServerTime = DateTimeKind.Local)]
public DateTime UpdatedAt { get; set; }
[Column(Name = "userId")]
public int UserId { get; set; }
[Column(Name = "is_yanshou")]
public int IsYanShou { get; set; }
[Column(IsIgnore = true)]
public string AccessType { get; set; }
}
}
}