Skip to content

Commit 611c066

Browse files
2881028810
authored andcommitted
- 合并 FreeSql.DbContext 项目至 FreeSql 维护;
1 parent a708062 commit 611c066

File tree

185 files changed

+4577
-95
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

185 files changed

+4577
-95
lines changed
Lines changed: 241 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,241 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Threading.Tasks;
5+
using FreeSql;
6+
using Microsoft.AspNetCore.Mvc;
7+
8+
namespace dbcontext_01.Controllers {
9+
[Route("api/[controller]")]
10+
[ApiController]
11+
public class ValuesController : ControllerBase {
12+
13+
IFreeSql _orm;
14+
SongContext _songContext;
15+
public ValuesController(SongContext songContext,
16+
IFreeSql orm1, IFreeSql orm2,
17+
IFreeSql<long> orm3
18+
) {
19+
_songContext = songContext;
20+
_orm = orm1;
21+
22+
}
23+
24+
// GET api/values
25+
[HttpGet]
26+
async public Task<string> Get() {
27+
28+
long id = 0;
29+
30+
try {
31+
32+
var repos2Song = _orm.GetRepository<Song, int>();
33+
repos2Song.Where(a => a.Id > 10).ToList();
34+
//查询结果,进入 states
35+
36+
var song = new Song { };
37+
repos2Song.Insert(song);
38+
id = song.Id;
39+
40+
var adds = Enumerable.Range(0, 100)
41+
.Select(a => new Song { Create_time = DateTime.Now, Is_deleted = false, Title = "xxxx" + a, Url = "url222" })
42+
.ToList();
43+
//创建一堆无主键值
44+
45+
repos2Song.Insert(adds);
46+
47+
for (var a = 0; a < 10; a++)
48+
adds[a].Title = "dkdkdkdk" + a;
49+
50+
repos2Song.Update(adds);
51+
//批量修改
52+
53+
repos2Song.Delete(adds.Skip(10).Take(20).ToList());
54+
//批量删除,10-20 元素的主键值会被清除
55+
56+
adds.Last().Url = "skldfjlksdjglkjjcccc";
57+
repos2Song.Update(adds.Last());
58+
59+
adds.First().Url = "skldfjlksdjglkjjcccc";
60+
repos2Song.Update(adds.First());
61+
62+
63+
var ctx = _songContext;
64+
var tag = new Tag {
65+
Name = "testaddsublist",
66+
Tags = new[] {
67+
new Tag { Name = "sub1" },
68+
new Tag { Name = "sub2" },
69+
new Tag {
70+
Name = "sub3",
71+
Tags = new[] {
72+
new Tag { Name = "sub3_01" }
73+
}
74+
}
75+
}
76+
};
77+
ctx.Tags.Add(tag);
78+
79+
80+
ctx.UnitOfWork.GetOrBeginTransaction();
81+
82+
var tagAsync = new Tag {
83+
Name = "testaddsublist",
84+
Tags = new[] {
85+
new Tag { Name = "sub1" },
86+
new Tag { Name = "sub2" },
87+
new Tag {
88+
Name = "sub3",
89+
Tags = new[] {
90+
new Tag { Name = "sub3_01" }
91+
}
92+
}
93+
}
94+
};
95+
await ctx.Tags.AddAsync(tagAsync);
96+
97+
98+
ctx.Songs.Select.Where(a => a.Id > 10).ToList();
99+
//查询结果,进入 states
100+
101+
song = new Song { };
102+
//可插入的 song
103+
104+
ctx.Songs.Add(song);
105+
id = song.Id;
106+
//因有自增类型,立即开启事务执行SQL,返回自增值
107+
108+
adds = Enumerable.Range(0, 100)
109+
.Select(a => new Song { Create_time = DateTime.Now, Is_deleted = false, Title = "xxxx" + a, Url = "url222" })
110+
.ToList();
111+
//创建一堆无主键值
112+
113+
ctx.Songs.AddRange(adds);
114+
//立即执行,将自增值赋给 adds 所有元素,因为有自增类型,如果其他类型,指定传入主键值,不会立即执行
115+
116+
for (var a = 0; a < 10; a++)
117+
adds[a].Title = "dkdkdkdk" + a;
118+
119+
ctx.Songs.UpdateRange(adds);
120+
//批量修改,进入队列
121+
122+
ctx.Songs.RemoveRange(adds.Skip(10).Take(20).ToList());
123+
//批量删除,进入队列,完成时 10-20 元素的主键值会被清除
124+
125+
//ctx.Songs.Update(adds.First());
126+
127+
adds.Last().Url = "skldfjlksdjglkjjcccc";
128+
ctx.Songs.Update(adds.Last());
129+
130+
adds.First().Url = "skldfjlksdjglkjjcccc";
131+
ctx.Songs.Update(adds.First());
132+
133+
//单条修改 urls 的值,进入队列
134+
135+
//throw new Exception("回滚");
136+
137+
//ctx.Songs.Select.First();
138+
//这里做一个查询,会立即打包【执行队列】,避免没有提交的数据,影响查询结果
139+
140+
ctx.SaveChanges();
141+
//打包【执行队列】,提交事务
142+
143+
144+
using (var uow = _orm.CreateUnitOfWork()) {
145+
146+
var reposSong = uow.GetRepository<Song, int>();
147+
reposSong.Where(a => a.Id > 10).ToList();
148+
//查询结果,进入 states
149+
150+
song = new Song { };
151+
reposSong.Insert(song);
152+
id = song.Id;
153+
154+
adds = Enumerable.Range(0, 100)
155+
.Select(a => new Song { Create_time = DateTime.Now, Is_deleted = false, Title = "xxxx" + a, Url = "url222" })
156+
.ToList();
157+
//创建一堆无主键值
158+
159+
reposSong.Insert(adds);
160+
161+
for (var a = 0; a < 10; a++)
162+
adds[a].Title = "dkdkdkdk" + a;
163+
164+
reposSong.Update(adds);
165+
//批量修改
166+
167+
reposSong.Delete(adds.Skip(10).Take(20).ToList());
168+
//批量删除,10-20 元素的主键值会被清除
169+
170+
adds.Last().Url = "skldfjlksdjglkjjcccc";
171+
reposSong.Update(adds.Last());
172+
173+
adds.First().Url = "skldfjlksdjglkjjcccc";
174+
reposSong.Update(adds.First());
175+
176+
uow.Commit();
177+
}
178+
179+
180+
181+
//using (var ctx = new SongContext()) {
182+
183+
// var song = new Song { };
184+
// await ctx.Songs.AddAsync(song);
185+
// id = song.Id;
186+
187+
// var adds = Enumerable.Range(0, 100)
188+
// .Select(a => new Song { Create_time = DateTime.Now, Is_deleted = false, Title = "xxxx" + a, Url = "url222" })
189+
// .ToList();
190+
// await ctx.Songs.AddRangeAsync(adds);
191+
192+
// for (var a = 0; a < adds.Count; a++)
193+
// adds[a].Title = "dkdkdkdk" + a;
194+
195+
// ctx.Songs.UpdateRange(adds);
196+
197+
// ctx.Songs.RemoveRange(adds.Skip(10).Take(20).ToList());
198+
199+
// //ctx.Songs.Update(adds.First());
200+
201+
// adds.Last().Url = "skldfjlksdjglkjjcccc";
202+
// ctx.Songs.Update(adds.Last());
203+
204+
// //throw new Exception("回滚");
205+
206+
// await ctx.SaveChangesAsync();
207+
//}
208+
} catch {
209+
var item = await _orm.Select<Song>().Where(a => a.Id == id).FirstAsync();
210+
211+
throw;
212+
}
213+
214+
var item22 = await _orm.Select<Song>().Where(a => a.Id == id).FirstAsync();
215+
var item33 = await _orm.Select<Song>().Where(a => a.Id > id).ToListAsync();
216+
217+
return item22.Id.ToString();
218+
}
219+
220+
// GET api/values/5
221+
[HttpGet("{id}")]
222+
public ActionResult<string> Get(int id) {
223+
return "value";
224+
}
225+
226+
// POST api/values
227+
[HttpPost]
228+
public void Post([FromBody] string value) {
229+
}
230+
231+
// PUT api/values/5
232+
[HttpPut("{id}")]
233+
public void Put(int id, [FromBody] string value) {
234+
}
235+
236+
// DELETE api/values/5
237+
[HttpDelete("{id}")]
238+
public void Delete(int id) {
239+
}
240+
}
241+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using FreeSql;
2+
using FreeSql.DataAnnotations;
3+
using System;
4+
using System.Collections.Generic;
5+
6+
namespace dbcontext_01 {
7+
8+
public class SongContext : DbContext {
9+
10+
public DbSet<Song> Songs { get; set; }
11+
public DbSet<Tag> Tags { get; set; }
12+
13+
//protected override void OnConfiguring(DbContextOptionsBuilder builder) {
14+
// builder.UseFreeSql(dbcontext_01.Startup.Fsql);
15+
//}
16+
}
17+
18+
19+
public class Song {
20+
[Column(IsIdentity = true)]
21+
public int Id { get; set; }
22+
public DateTime? Create_time { get; set; }
23+
public bool? Is_deleted { get; set; }
24+
public string Title { get; set; }
25+
public string Url { get; set; }
26+
27+
public virtual ICollection<Tag> Tags { get; set; }
28+
29+
[Column(IsVersion = true)]
30+
public long versionRow { get; set; }
31+
}
32+
public class Song_tag {
33+
public int Song_id { get; set; }
34+
public virtual Song Song { get; set; }
35+
36+
public int Tag_id { get; set; }
37+
public virtual Tag Tag { get; set; }
38+
}
39+
40+
public class Tag {
41+
[Column(IsIdentity = true)]
42+
public int Id { get; set; }
43+
public int? Parent_id { get; set; }
44+
public virtual Tag Parent { get; set; }
45+
46+
public decimal? Ddd { get; set; }
47+
public string Name { get; set; }
48+
49+
public virtual ICollection<Song> Songs { get; set; }
50+
public virtual ICollection<Tag> Tags { get; set; }
51+
}
52+
}

Examples/dbcontext_01/Program.cs

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Diagnostics;
4+
using System.IO;
5+
using System.Linq;
6+
using System.Numerics;
7+
using System.Threading.Tasks;
8+
using FreeSql;
9+
using FreeSql.DataAnnotations;
10+
using Microsoft.AspNetCore;
11+
using Microsoft.AspNetCore.Hosting;
12+
using Microsoft.Extensions.Configuration;
13+
using Microsoft.Extensions.Logging;
14+
15+
namespace dbcontext_01
16+
{
17+
public class Program
18+
{
19+
20+
public class Song {
21+
[Column(IsIdentity = true)]
22+
public int Id { get; set; }
23+
public string BigNumber { get; set; }
24+
25+
[Column(IsVersion = true)]//使用简单
26+
public long versionRow { get; set; }
27+
}
28+
29+
public class SongContext : DbContext {
30+
31+
public DbSet<Song> Songs { get; set; }
32+
33+
protected override void OnConfiguring(DbContextOptionsBuilder builder) {
34+
builder.UseFreeSql(fsql);
35+
}
36+
}
37+
static IFreeSql fsql;
38+
public static void Main(string[] args) {
39+
fsql = new FreeSql.FreeSqlBuilder()
40+
.UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|\dd2.db;Pooling=true;Max Pool Size=10")
41+
.UseAutoSyncStructure(true)
42+
.UseLazyLoading(true)
43+
.UseNoneCommandParameter(true)
44+
45+
.UseMonitorCommand(cmd => Trace.WriteLine(cmd.CommandText))
46+
.Build();
47+
48+
49+
using (var ctx = new SongContext()) {
50+
var song = new Song { BigNumber = "1000000000000000000" };
51+
ctx.Songs.Add(song);
52+
53+
ctx.Songs.Update(song);
54+
55+
song.BigNumber = (BigInteger.Parse(song.BigNumber) + 1).ToString();
56+
ctx.Songs.Update(song);
57+
58+
ctx.SaveChanges();
59+
60+
var sql = fsql.Update<Song>().SetSource(song).ToSql();
61+
}
62+
63+
CreateWebHostBuilder(args).Build().Run();
64+
}
65+
66+
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
67+
WebHost.CreateDefaultBuilder(args)
68+
.UseStartup<Startup>();
69+
}
70+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{
2+
"iisSettings": {
3+
"windowsAuthentication": false,
4+
"anonymousAuthentication": true,
5+
"iisExpress": {
6+
"applicationUrl": "http://localhost:53030/",
7+
"sslPort": 0
8+
}
9+
},
10+
"profiles": {
11+
"IIS Express": {
12+
"commandName": "IISExpress",
13+
"launchBrowser": true,
14+
"environmentVariables": {
15+
"ASPNETCORE_ENVIRONMENT": "Development"
16+
}
17+
},
18+
"dbcontext_01": {
19+
"commandName": "Project",
20+
"launchBrowser": true,
21+
"environmentVariables": {
22+
"ASPNETCORE_ENVIRONMENT": "Development"
23+
},
24+
"applicationUrl": "http://localhost:53031/"
25+
}
26+
}
27+
}

0 commit comments

Comments
 (0)