public void UpdateParent()
 {
     if (_modifiedEntries != null)
     {
         _dbContextScope.RefreshEntitiesInParentScope(_modifiedEntries);
     }
 }
        public void SendWelcomeEmail(Guid userId)
        {
            /*
             * Demo of forcing the creation of a new DbContextScope
             * to ensure that changes made to the model in this service
             * method are persisted even if that method happens to get
             * called within the scope of a wider business transaction
             * that eventually fails for any reason.
             *
             * This is an advanced feature that should be used as rarely
             * as possible (and ideally, never).
             */

            // We're going to send a welcome email to the provided user
            // (if one hasn't been sent already). Once sent, we'll update
            // that User entity in our DB to record that its Welcome email
            // has been sent.

            // Emails can't be rolled-back. Once they're sent, they're sent.
            // So once the email has been sent successfully, we absolutely
            // must persist this fact in our DB. Even if that method is called
            // by another busines logic service method as part of a wider
            // business transaction and even if that parent business transaction
            // ends up failing for any reason, we still must ensure that
            // we have recorded the fact that the Welcome email has been sent.
            // Otherwise, we would risk spamming our users with repeated Welcome
            // emails.

            // Force the creation of a new DbContextScope so that the changes we make here are
            // guaranteed to get persisted regardless of what happens after this method has completed.
            using (IDbContextScope dbContextScope = _dbContextScopeFactory.Create(DbContextScopeOption.ForceCreateNew))
            {
                UserManagementDbContext dbContext = dbContextScope.DbContexts.Get <UserManagementDbContext>();
#if EF6
                User user = dbContext.Users.Find(userId);
#elif EFCore
                var user = dbContext.Users.SingleOrDefault(x => x.Id == userId);
#endif

                if (user == null)
                {
                    throw new ArgumentException($"Invalid userId provided: {userId}. Couldn't find a User with this ID.");
                }

                if (!user.WelcomeEmailSent)
                {
                    SendEmail(user.Email);
                    user.WelcomeEmailSent = true;
                }

                dbContextScope.SaveChanges();

                // When you force the creation of a new DbContextScope, you must force the parent
                // scope (if any) to reload the entities you've modified here. Otherwise, the method calling
                // you might not be able to see the changes you made here.
                dbContextScope.RefreshEntitiesInParentScope(new List <User> {
                    user
                });
            }
        }