-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProgram.cs
More file actions
112 lines (77 loc) · 2.66 KB
/
Program.cs
File metadata and controls
112 lines (77 loc) · 2.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
using ManyToManyRemoveAndAddTest.Data;
using ManyToManyRemoveAndAddTest.Models;
using Microsoft.EntityFrameworkCore;
namespace ManyToManyRemoveAndAddTest;
internal class Program
{
//Add one Post and two Tags to the database
static async Task SeedDataAsync()
{
using var ctx = new Context();
await ctx.Database.EnsureDeletedAsync();
await ctx.Database.EnsureCreatedAsync();
var post = new Post("Post 1 Title", "Post 1 Text");
var tag1 = new Tag("Tag 1 Text" );
var tag2 = new Tag("Tag 2 Text");
post.Tags.Add(tag1);
post.Tags.Add(tag2);
ctx.Add(post);
await ctx.SaveChangesAsync();
}
//Get the count of Tags associated with the first Post
static async Task<int> GetTagCount()
{
using var ctx = new Context();
return await ctx.Posts.Select(x => x.Tags.Count).FirstOrDefaultAsync();
}
//Remove and add the same Tag from the first Post
static async Task RemoveAndAddSameTagFromPostAsync(bool callDetectChanges)
{
using var ctx = new Context();
var post = await ctx.Posts.Include(x => x.Tags).FirstAsync();
var tag = post.Tags.First();
post.Tags.Remove(tag);
if (callDetectChanges)
{
ctx.ChangeTracker.DetectChanges();
}
post.Tags.Add(tag);
await ctx.SaveChangesAsync();
}
//Add and remove the same Tag from the first Post
static async Task AddAndRemoveSameTagFromPostAsync(bool callDetectChanges)
{
using var ctx = new Context();
var post = await ctx.Posts.Include(x => x.Tags).FirstAsync();
var tag = new Tag("Tag 3 Text");
post.Tags.Add(tag);
if (callDetectChanges)
{
ctx.ChangeTracker.DetectChanges();
}
post.Tags.Remove(tag);
await ctx.SaveChangesAsync();
}
static async Task TestRemoveAndAddAsync(bool callDetectChanges)
{
Console.WriteLine($"{Environment.NewLine}Test of removing and then adding of same tag {(callDetectChanges ? "with" : "without")} DetectChanges()");
Console.WriteLine($"Tag count before: {await GetTagCount()}");
await RemoveAndAddSameTagFromPostAsync(callDetectChanges);
Console.WriteLine($"Tag count after: {await GetTagCount()}");
}
static async Task TestAddAndRemoveAsync(bool callDetectChanges)
{
Console.WriteLine($"{Environment.NewLine}Test of adding and then removing of same tag {(callDetectChanges ? "with" : "without")} DetectChanges()");
Console.WriteLine($"Tag count before: {await GetTagCount()}");
await AddAndRemoveSameTagFromPostAsync(callDetectChanges);
Console.WriteLine($"Tag count after: {await GetTagCount()}");
}
static async Task Main(string[] args)
{
await SeedDataAsync();
await TestAddAndRemoveAsync(false);
await TestAddAndRemoveAsync(true);
await TestRemoveAndAddAsync(false);
await TestRemoveAndAddAsync(true);
}
}