Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Threading.Tasks;
- using ConcurrencyTests.Api;
- using Microsoft.EntityFrameworkCore;
- namespace ConcurrencyTestsConsole
- {
- public class Parent
- {
- public int Id { get; set; }
- public ICollection<Child> Children { get; set; }
- }
- public class Child
- {
- public int Id { get; set; }
- public string Name { get; set; }
- public int ParentId { get; set; }
- public Parent Parent { get; set; }
- }
- public class AppDbContext : DbContext
- {
- public DbSet<Parent> Parents { get; set; }
- public DbSet<Child> Children { get; set; }
- protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
- {
- optionsBuilder.UseNpgsql("Host=localhost;Database=concurrency_tests;Username=postgres;Password=admin");
- }
- }
- class Program
- {
- static async Task CreateParent()
- {
- using (var db = new AppDbContext())
- {
- db.Parents.Add(new Parent());
- await db.SaveChangesAsync();
- }
- }
- static async Task DeleteParents()
- {
- using (var db = new AppDbContext())
- {
- await Task.Delay(1000);
- db.Parents.RemoveRange(db.Parents);
- await db.SaveChangesAsync();
- Console.WriteLine("Parent was deleted");
- }
- }
- static async Task CreateChild()
- {
- using (var db = new AppDbContext())
- {
- using (var transaction = db.Database.BeginTransaction())
- {
- var parent = await db.Parents.FirstOrDefaultAsync();
- if (parent == null)
- {
- Console.WriteLine("Parent cannot be null!");
- return;
- }
- Console.WriteLine("Parent exists!");
- await Task.Delay(3000);
- db.Children.Add(new Child
- {
- Name = "dupa",
- Parent = parent
- });
- Console.WriteLine("Trying to add a child with deleted parent");
- await db.SaveChangesAsync();
- Console.WriteLine("Child added");
- }
- }
- }
- static async Task Main()
- {
- await CreateParent();
- var createChildTask = CreateChild();
- var deleteParentsTask = DeleteParents();
- await Task.WhenAll(createChildTask, deleteParentsTask);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement