Skip to content

Commit

Permalink
Revert making saving samples async (#2882)
Browse files Browse the repository at this point in the history
Closes #2754
Fixes #2886
  • Loading branch information
roji committed Dec 9, 2020
1 parent ef378fe commit cd63879
Show file tree
Hide file tree
Showing 13 changed files with 302 additions and 319 deletions.
42 changes: 19 additions & 23 deletions samples/core/Saving/Basics/Sample.cs
Original file line number Diff line number Diff line change
@@ -1,72 +1,68 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using System.Linq;

namespace EFSaving.Basics
{
public class Sample
{
public static async Task RunAsync()
public static void Run()
{
await using (var context = new BloggingContext())
using (var context = new BloggingContext())
{
await context.Database.EnsureDeletedAsync();
await context.Database.EnsureCreatedAsync();
context.Database.EnsureDeleted();
context.Database.EnsureCreated();
}

#region Add
await using (var context = new BloggingContext())
using (var context = new BloggingContext())
{
var blog = new Blog { Url = "http://example.com" };
context.Blogs.Add(blog);
await context.SaveChangesAsync();
context.SaveChanges();
}
#endregion

#region Update
await using (var context = new BloggingContext())
using (var context = new BloggingContext())
{
var blog = await context.Blogs.FirstAsync();
var blog = context.Blogs.First();
blog.Url = "http://example.com/blog";
await context.SaveChangesAsync();
context.SaveChanges();
}
#endregion

#region Remove
await using (var context = new BloggingContext())
using (var context = new BloggingContext())
{
var blog = await context.Blogs.FirstAsync();
var blog = context.Blogs.First();
context.Blogs.Remove(blog);
await context.SaveChangesAsync();
context.SaveChanges();
}
#endregion

#region MultipleOperations
await using (var context = new BloggingContext())
using (var context = new BloggingContext())
{
// seeding database
context.Blogs.Add(new Blog { Url = "http://example.com/blog" });
context.Blogs.Add(new Blog { Url = "http://example.com/another_blog" });
await context.SaveChangesAsync();
context.SaveChanges();
}

await using (var context = new BloggingContext())
using (var context = new BloggingContext())
{
// add
context.Blogs.Add(new Blog { Url = "http://example.com/blog_one" });
context.Blogs.Add(new Blog { Url = "http://example.com/blog_two" });

// update
var firstBlog = await context.Blogs.FirstAsync();
var firstBlog = context.Blogs.First();
firstBlog.Url = "";

// remove
var lastBlog = await context.Blogs.LastAsync();
var lastBlog = context.Blogs.Last();
context.Blogs.Remove(lastBlog);

await context.SaveChangesAsync();
context.SaveChanges();
}
#endregion
}
Expand Down
75 changes: 37 additions & 38 deletions samples/core/Saving/CascadeDelete/Sample.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,46 +2,45 @@
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace EFSaving.CascadeDelete
{
public class Sample
{
public static async Task RunAsync()
public static void Run()
{
await DeleteBehaviorSampleAsync(DeleteBehavior.Cascade, true);
await DeleteBehaviorSampleAsync(DeleteBehavior.ClientSetNull, true);
await DeleteBehaviorSampleAsync(DeleteBehavior.SetNull, true);
await DeleteBehaviorSampleAsync(DeleteBehavior.Restrict, true);

await DeleteBehaviorSampleAsync(DeleteBehavior.Cascade, false);
await DeleteBehaviorSampleAsync(DeleteBehavior.ClientSetNull, false);
await DeleteBehaviorSampleAsync(DeleteBehavior.SetNull, false);
await DeleteBehaviorSampleAsync(DeleteBehavior.Restrict, false);

await DeleteOrphansSampleAsync(DeleteBehavior.Cascade, true);
await DeleteOrphansSampleAsync(DeleteBehavior.ClientSetNull, true);
await DeleteOrphansSampleAsync(DeleteBehavior.SetNull, true);
await DeleteOrphansSampleAsync(DeleteBehavior.Restrict, true);

await DeleteOrphansSampleAsync(DeleteBehavior.Cascade, false);
await DeleteOrphansSampleAsync(DeleteBehavior.ClientSetNull, false);
await DeleteOrphansSampleAsync(DeleteBehavior.SetNull, false);
await DeleteOrphansSampleAsync(DeleteBehavior.Restrict, false);
DeleteBehaviorSample(DeleteBehavior.Cascade, true);
DeleteBehaviorSample(DeleteBehavior.ClientSetNull, true);
DeleteBehaviorSample(DeleteBehavior.SetNull, true);
DeleteBehaviorSample(DeleteBehavior.Restrict, true);

DeleteBehaviorSample(DeleteBehavior.Cascade, false);
DeleteBehaviorSample(DeleteBehavior.ClientSetNull, false);
DeleteBehaviorSample(DeleteBehavior.SetNull, false);
DeleteBehaviorSample(DeleteBehavior.Restrict, false);

DeleteOrphansSample(DeleteBehavior.Cascade, true);
DeleteOrphansSample(DeleteBehavior.ClientSetNull, true);
DeleteOrphansSample(DeleteBehavior.SetNull, true);
DeleteOrphansSample(DeleteBehavior.Restrict, true);

DeleteOrphansSample(DeleteBehavior.Cascade, false);
DeleteOrphansSample(DeleteBehavior.ClientSetNull, false);
DeleteOrphansSample(DeleteBehavior.SetNull, false);
DeleteOrphansSample(DeleteBehavior.Restrict, false);
}

private static async Task DeleteBehaviorSampleAsync(DeleteBehavior deleteBehavior, bool requiredRelationship)
private static void DeleteBehaviorSample(DeleteBehavior deleteBehavior, bool requiredRelationship)
{
Console.WriteLine($"Test using DeleteBehavior.{deleteBehavior} with {(requiredRelationship ? "required" : "optional")} relationship:");

await InitializeDatabaseAsync(requiredRelationship);
InitializeDatabase(requiredRelationship);

await using var context = new BloggingContext(deleteBehavior, requiredRelationship);
using var context = new BloggingContext(deleteBehavior, requiredRelationship);

#region DeleteBehaviorVariations
var blog = await context.Blogs.Include(b => b.Posts).FirstAsync();
var posts = await blog.Posts.AsQueryable().ToListAsync();
var blog = context.Blogs.Include(b => b.Posts).First();
var posts = blog.Posts.AsQueryable().ToList();

DumpEntities(" After loading entities:", context, blog, posts);

Expand All @@ -54,7 +53,7 @@ private static async Task DeleteBehaviorSampleAsync(DeleteBehavior deleteBehavio
Console.WriteLine();
Console.WriteLine(" Saving changes:");

await context.SaveChangesAsync();
context.SaveChanges();

DumpSql();

Expand All @@ -72,17 +71,17 @@ private static async Task DeleteBehaviorSampleAsync(DeleteBehavior deleteBehavio
Console.WriteLine();
}

private static async Task DeleteOrphansSampleAsync(DeleteBehavior deleteBehavior, bool requiredRelationship)
private static void DeleteOrphansSample(DeleteBehavior deleteBehavior, bool requiredRelationship)
{
Console.WriteLine($"Test deleting orphans with DeleteBehavior.{deleteBehavior} and {(requiredRelationship ? "a required" : "an optional")} relationship:");

await InitializeDatabaseAsync(requiredRelationship);
InitializeDatabase(requiredRelationship);

await using var context = new BloggingContext(deleteBehavior, requiredRelationship);
using var context = new BloggingContext(deleteBehavior, requiredRelationship);

#region DeleteOrphansVariations
var blog = await context.Blogs.Include(b => b.Posts).FirstAsync();
var posts = await blog.Posts.AsQueryable().ToListAsync();
var blog = context.Blogs.Include(b => b.Posts).First();
var posts = blog.Posts.AsQueryable().ToList();

DumpEntities(" After loading entities:", context, blog, posts);

Expand All @@ -95,7 +94,7 @@ private static async Task DeleteOrphansSampleAsync(DeleteBehavior deleteBehavior
Console.WriteLine();
Console.WriteLine(" Saving changes:");

await context.SaveChangesAsync();
context.SaveChanges();

DumpSql();

Expand All @@ -113,11 +112,11 @@ private static async Task DeleteOrphansSampleAsync(DeleteBehavior deleteBehavior
Console.WriteLine();
}

private static async Task InitializeDatabaseAsync(bool requiredRelationship)
private static void InitializeDatabase(bool requiredRelationship)
{
await using var context = new BloggingContext(DeleteBehavior.ClientSetNull, requiredRelationship);
await context.Database.EnsureDeletedAsync();
await context.Database.EnsureCreatedAsync();
using var context = new BloggingContext(DeleteBehavior.ClientSetNull, requiredRelationship);
context.Database.EnsureDeleted();
context.Database.EnsureCreated();

context.Blogs.Add(new Blog
{
Expand All @@ -129,7 +128,7 @@ private static async Task InitializeDatabaseAsync(bool requiredRelationship)
}
});

await context.SaveChangesAsync();
context.SaveChanges();
}

private static void DumpEntities(string message, BloggingContext context, Blog blog, IList<Post> posts)
Expand Down
19 changes: 9 additions & 10 deletions samples/core/Saving/Concurrency/Sample.cs
Original file line number Diff line number Diff line change
@@ -1,33 +1,32 @@
using System;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;

namespace EFSaving.Concurrency
{
public class Sample
{
public static async Task RunAsync()
public static void Run()
{
// Ensure database is created and has a person in it
await using (var setupContext = new PersonContext())
using (var setupContext = new PersonContext())
{
await setupContext.Database.EnsureDeletedAsync();
await setupContext.Database.EnsureCreatedAsync();
setupContext.Database.EnsureDeleted();
setupContext.Database.EnsureCreated();

setupContext.People.Add(new Person { FirstName = "John", LastName = "Doe" });
await setupContext.SaveChangesAsync();
setupContext.SaveChanges();
}

#region ConcurrencyHandlingCode
await using var context = new PersonContext();
using var context = new PersonContext();
// Fetch a person from database and change phone number
var person = context.People.Single(p => p.PersonId == 1);
person.PhoneNumber = "555-555-5555";

// Change the person's name in the database to simulate a concurrency conflict
await context.Database.ExecuteSqlRawAsync(
context.Database.ExecuteSqlRaw(
"UPDATE dbo.People SET FirstName = 'Jane' WHERE PersonId = 1");

var saved = false;
Expand All @@ -36,7 +35,7 @@ await context.Database.ExecuteSqlRawAsync(
try
{
// Attempt to save changes to the database
await context.SaveChangesAsync();
context.SaveChanges();
saved = true;
}
catch (DbUpdateConcurrencyException ex)
Expand All @@ -46,7 +45,7 @@ await context.Database.ExecuteSqlRawAsync(
if (entry.Entity is Person)
{
var proposedValues = entry.CurrentValues;
var databaseValues = await entry.GetDatabaseValuesAsync();
var databaseValues = entry.GetDatabaseValues();

foreach (var property in proposedValues.Properties)
{
Expand Down
Loading

0 comments on commit cd63879

Please sign in to comment.