private static void WriteSandGrain(SandGrainEntity grain)
 {
     System.Console.WriteLine();
     System.Console.WriteLine($"    GRAIN ADDED");
     System.Console.WriteLine($"    Internal ID:  {grain.InternalId}");
     System.Console.WriteLine($"    Primary Key:  {grain.Id}");
     System.Console.WriteLine($"    Created Date: {grain.CreatedDate.ToString("s")}");
     System.Console.WriteLine();
 }
        private static SandGrainEntity CloneGrain(SandboxContext context, SandGrainEntity original)
        {
            var clonedGrain = new SandGrainEntity();
            var cloneValues = context.Entry(original).CurrentValues.Clone();

            context.Entry(clonedGrain).CurrentValues.SetValues(cloneValues);
            clonedGrain.InternalId = 0;
            clonedGrain.Id         = Guid.NewGuid();

            return(clonedGrain);
        }
        static void Main(string[] args)
        {
            var inMemoryContextOptions = new DbContextOptionsBuilder <SandboxContext>()
                                         .UseInMemoryDatabase(databaseName: "Test")
                                         .Options;

            using (var context = new SandboxContext(inMemoryContextOptions))
            {
                var beach = new BeachEntity();
                beach.Id = Guid.NewGuid();

                for (int i = 0; i < 5; i++)
                {
                    var grain = new SandGrainEntity
                    {
                        CreatedDate = DateTime.UtcNow,
                        Id          = Guid.NewGuid()
                    };
                    beach.Grains.Add(grain);
                }

                context.Database.EnsureCreated();
                context.Beaches.Add(beach);
                int savedCount = context.SaveChanges();

                System.Console.WriteLine();
                System.Console.WriteLine($"Created {savedCount} new entries.");
                System.Console.WriteLine();

                WriteBeach(beach);

                BeachEntity clonedBeach = CloneBeach(context, beach);
                context.Beaches.Add(clonedBeach);

                savedCount = context.SaveChanges();
                System.Console.WriteLine();
                System.Console.WriteLine($"Created {savedCount} new entries.");
                System.Console.WriteLine();
                WriteBeach(clonedBeach);
            }
        }