Esempio n. 1
0
 public UnitOfWork(DataContext1 dataContext1, DataContext2 dataContext2, DataContext3 dataContext3)
 {
     _dataContext1      = dataContext1;
     _dataContext2      = dataContext2;
     _dataContext3      = dataContext3;
     UserRepository     = new UserRepository(dataContext1);
     UserLogRepository  = new UserLogRepository(dataContext2);
     CategoryRepository = new CategoryRepository(dataContext3);
     ProductRepository  = new ProductRepository(dataContext3);
 }
Esempio n. 2
0
        public static void ThirdTry()
        {
            Console.Clear();
            Console.WriteLine(" -- Starting Third EF Core Test - derived object no interface! -- \n");

            var context = new DataContext3();

            // local function - only visible in ThirdTry
            void PrintSkus(IEnumerable <BaseComponent> components)
            {
                foreach (var item in components)
                {
                    Console.WriteLine($"\tSku: {item.Sku} Name: {item.Name}");
                }
            }

            // seed lookup values if none are present
            // since I'm using an in-memory database none should be present.
            if (context.Lookups.Count() == 0)
            {
                Console.WriteLine("Seeding Lookup records");
                for (int i = 1; i <= 10; i++)
                {
                    context.Lookups.Add(new Lookup3
                    {
                        Sku    = i.ToString(),
                        Price  = (decimal)i * 5,
                        Weight = (decimal)i * 7,
                    });
                }
                context.SaveChanges();
            }

            if (context.Plugs.Count() == 0)
            {
                Console.WriteLine("Seeding Plug records");
                for (int i = 1; i <= 4; i++)
                {
                    context.Plugs.Add(new DerivedPlug
                    {
                        Sku           = i.ToString(),
                        Name          = $"Plug {i}",
                        DerivedPlugId = i
                    });
                }
                context.SaveChanges();
            }

            if (context.Connectors.Count() == 0)
            {
                Console.WriteLine("Seeding Connector records");
                for (int i = 5; i <= 7; i++)
                {
                    context.Connectors.Add(new DerivedConnector
                    {
                        Sku  = i.ToString(),
                        Name = $"Connector {i}",
                        DerivedConnectorId = i
                    });
                }
                context.SaveChanges();
            }

            if (context.Cords.Count() == 0)
            {
                Console.WriteLine("Seeding Cord records");
                for (int i = 8; i <= 10; i++)
                {
                    context.Cords.Add(new DerivedCord
                    {
                        Sku           = i.ToString(),
                        Name          = $"Cord {i}",
                        DerivedCordId = i
                    });
                }
                context.SaveChanges();
            }

            // Sample code to test the relationships set up in OnModelCreating
            // This assumes that each cord, plug and connector has a corresponding lookup record, which may not always be the case.
            //
            // Need to allow lookup records to not have a corresponding cord, plug or connector as well as
            // allow a cord, plug or connector to not have a corresponding lookup record.
            var cord = context.Cords.First();

            Console.WriteLine($"\nCord {cord.Sku} Price: {cord.Lookup.Price} Weight: {cord.Lookup.Weight}");

            var plug = context.Plugs.First();

            Console.WriteLine($"Plug {plug.Sku} Price: {plug.Lookup.Price} Weight: {plug.Lookup.Weight}");

            var connector = context.Connectors.First();

            Console.WriteLine($"Connector {connector.Sku} Price: {connector.Lookup.Price} Weight: {connector.Lookup.Weight}");

            // let's add some data that does not correspond to values in the lookup table.
            context.Plugs.Add(new DerivedPlug
            {
                Sku           = "100",
                Name          = "Test plug 100",
                DerivedPlugId = 100
            });
            context.SaveChanges();

            context.Connectors.Add(new DerivedConnector
            {
                Sku  = "101",
                Name = "Test connector 101",
                DerivedConnectorId = 101
            });
            context.SaveChanges();

            context.Cords.Add(new DerivedCord
            {
                Sku           = "102",
                Name          = "Test cord 102",
                DerivedCordId = 102
            });
            context.SaveChanges();

            // add a lookup value that does not correspond to a plug, connector or cord.
            context.Lookups.Add(new Lookup3
            {
                Sku    = "202",
                Weight = 1.25m,
                Price  = 50.00m
            });
            context.SaveChanges();

            // tests using objects without a related lookup object.
            // having to convert to list after the include because it was returning no records.
            var plugs       = context.Plugs.Include(x => x.Lookup).ToList();
            var orphanplugs = plugs.Where(x => x.Lookup == null).ToList();
            var pairedplugs = plugs.Where(x => x.Lookup != null).ToList();

            Console.WriteLine($"\nPlugs without lookup: {orphanplugs.Count()}");
            PrintSkus(orphanplugs);
            Console.WriteLine($"\nPlugs with lookup: {pairedplugs.Count()}");
            PrintSkus(pairedplugs);

            var connectors       = context.Connectors.Include(x => x.Lookup).ToList();
            var orphanconnectors = connectors.Where(x => x.Lookup == null).ToList();
            var pairedconnectors = connectors.Where(x => x.Lookup != null).ToList();

            Console.WriteLine($"Connectors without lookup: {orphanconnectors.Count()}");
            PrintSkus(orphanconnectors);
            Console.WriteLine($"Connectors with lookup: {pairedconnectors.Count()}");
            PrintSkus(pairedconnectors);

            var cords       = context.Cords.Include(x => x.Lookup).ToList();
            var orphancords = cords.Where(x => x.Lookup == null).ToList();
            var pairedcords = cords.Where(x => x.Lookup != null).ToList();

            Console.WriteLine($"Cords without lookup: {orphancords.Count()}");
            PrintSkus(orphancords);
            Console.WriteLine($"Cords with lookup: {pairedcords.Count()}");
            PrintSkus(pairedcords);

            // test lookup record without a related plug, connector or cord object
            var lookups = context.Lookups
                          .Include(x => x.Plugs).Include(x => x.Connectors).Include(x => x.Cords).ToList();
            var orphanlookups = lookups.Where(x => x.Plugs.Count() == 0 && x.Connectors.Count() == 0 && x.Cords.Count() == 0).ToList();
            var pairedlookups = lookups.Where(x => x.Plugs.Count() != 0 || x.Connectors.Count() != 0 || x.Cords.Count() != 0).ToList();

            Console.WriteLine($"Lookup without any related plug/connector/cord objects: {orphanlookups.Count()} ");
            Console.WriteLine($"Lookup with a related plug/connector/cord object: {pairedlookups.Count()} ");

            Console.WriteLine("\nPress any key to exit.");
            Console.ReadKey();
        }