diff --git a/Directory.Build.props b/Directory.Build.props
index f0b8ff92..57eab2c7 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -10,7 +10,7 @@
- 3.2.602
+ 3.2.603
diff --git a/FreeSql.DbContext/DbSet/DbSetAsync.cs b/FreeSql.DbContext/DbSet/DbSetAsync.cs
index d90c657d..ece0f850 100644
--- a/FreeSql.DbContext/DbSet/DbSetAsync.cs
+++ b/FreeSql.DbContext/DbSet/DbSetAsync.cs
@@ -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);
diff --git a/FreeSql.DbContext/DbSet/DbSetSync.cs b/FreeSql.DbContext/DbSet/DbSetSync.cs
index cd1178a0..54a8f216 100644
--- a/FreeSql.DbContext/DbSet/DbSetSync.cs
+++ b/FreeSql.DbContext/DbSet/DbSetSync.cs
@@ -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);
diff --git a/FreeSql.DbContext/FreeSql.DbContext.xml b/FreeSql.DbContext/FreeSql.DbContext.xml
index da7ace6b..bdd16ff9 100644
--- a/FreeSql.DbContext/FreeSql.DbContext.xml
+++ b/FreeSql.DbContext/FreeSql.DbContext.xml
@@ -538,5 +538,14 @@
+
+
+ 批量注入 Repository,可以参考代码自行调整
+
+
+
+
+
+
diff --git a/FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests.cs b/FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests.cs
index 5d116f7e..32403d20 100644
--- a/FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests.cs
+++ b/FreeSql.Tests/FreeSql.Tests.DbContext/RepositoryTests.cs
@@ -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
{
///
- /// һ¡
+ /// 更一条无法更新。
///
///
[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();
flowRepos.Insert(flow);
- //
+ //事务添加
flow = new FlowModel()
{
CreateTime = DateTime.Now,
@@ -192,7 +192,7 @@ namespace FreeSql.Tests
var uowFlowRepos = uow.GetRepository();
uowFlowRepos.Insert(flow);
uowFlowRepos.Orm.Select().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(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(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(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(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();
- repo.DbContextOptions.EnableAddOrUpdateNavigateList = false; //رռ湦
+ repo.DbContextOptions.EnableAddOrUpdateNavigateList = false; //关闭级联保存功能
var cts = new[] {
new Cagetory
{
- Name = "1",
+ Name = "分类1",
Goodss = new List(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(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(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(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(new[]
{
tags[0], tags[1]
@@ -496,7 +496,7 @@ namespace FreeSql.Tests
},
new Song
{
- Name = ".mp3",
+ Name = "李白.mp3",
Tags = new List(new[]
{
tags[0], tags[2]
@@ -504,23 +504,23 @@ namespace FreeSql.Tests
}
};
var repo = g.sqlite.GetRepository();
- 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().Where("1=1").ExecuteAffrows();
var repo = g.sqlite.GetRepository();
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().Where("1=1").ExecuteAffrows();
var repo = fsql.GetRepository();
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().Where("1=1").ExecuteAffrows();
+
+ var repo = fsql.GetRepository();
+
+ 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; }
+ }
}
}