static void Main(string[] args)
        {
            //var oracleContext = new OracleEntities();


            var oracleContext = new OracleEntities();
            var products      = oracleContext.PRODUCTS;

            foreach (var product in products)
            {
                Console.WriteLine(product.PRODUCTNAME);
            }


            //var products = oracleContex.PRODUCTS
            //    .Where(e => e.ISCOPIED.Equals(0) && e.ISDELETED.Equals(0))
            //    .Select(e => new
            //    {
            //        e.PRODUCTNAME,
            //        e.PRICE,
            //        e.VENDOR.VENDORNAME,
            //        e.MEASURE.MEASURENAME,
            //        e.PRODUCTSTYPE.TYPENAME
            //    })
            //    .ToList();

            //foreach (var product in products)
            //{
            //    Console.WriteLine(product.PRODUCTNAME);
            //}
        }
        static void Main(string[] args)
        {
            //var oracleContext = new OracleEntities();

            var oracleContext = new OracleEntities();
            var products = oracleContext.PRODUCTS;
            foreach (var product in products)
            {
                Console.WriteLine(product.PRODUCTNAME);
            }

            //var products = oracleContex.PRODUCTS
            //    .Where(e => e.ISCOPIED.Equals(0) && e.ISDELETED.Equals(0))
            //    .Select(e => new
            //    {
            //        e.PRODUCTNAME,
            //        e.PRICE,
            //        e.VENDOR.VENDORNAME,
            //        e.MEASURE.MEASURENAME,
            //        e.PRODUCTSTYPE.TYPENAME
            //    })
            //    .ToList();

            //foreach (var product in products)
            //{
            //    Console.WriteLine(product.PRODUCTNAME);
            //}
        }
        ///<summary>
        ///This is summary for method that transfer records from Oracle model into MQ SQL Server model.
        ///The method first select records from Oracle model which have not yet been copied or deleted.
        ///Second it inserts record into MS SQL Method and mark them as copied into Oracle model
        ///</summary>
        public static void UpdateMeasuresFromOracle()
        {
            var oracleContext = new OracleEntities();
            var msSqLcontext = new SupermarketContext();
            var measures = oracleContext.MEASURES
                    .Where(m => m.ISCOPIED == false && m.ISDELETED == false)
                    .Select(m => new
                    {
                        m.MEASURENAME
                    }).ToList();

            if (measures.Count > 0)
            {
                var addedMeasuresList = new List<string>();

                foreach (var measure in measures)
                {
                    var measureName = measure.MEASURENAME;

                    try
                    {
                        msSqLcontext.Measures.AddOrUpdate(
                            m => m.MeasureName,
                            new Measure()
                            {
                                MeasureName = measureName
                            });

                        msSqLcontext.SaveChanges();
                        addedMeasuresList.Add(measureName);
                    }
                    catch (Exception ex)
                    {
                        throw new ArgumentException();
                    }

                }

                var measuresToChange = oracleContext.MEASURES.Where(m => addedMeasuresList.Contains(m.MEASURENAME)).ToList();
                measuresToChange.ForEach(m => m.ISCOPIED = true);
                oracleContext.SaveChanges();

                Console.WriteLine("\nAdded new Measures from OracleBD into MS SQL Server:");
                measuresToChange.ForEach(m => Console.WriteLine("Added measure name: {0}", m.MEASURENAME));
            }
            else
            {
                Console.WriteLine("\nThere is no new records to import into MEASURES table!");
            }
        }
        ///<summary>
        ///This is summary for method that transfer records from Oracle model into MQ SQL Server model.
        ///The method first select records from Oracle model which have not yet been copied or deleted.
        ///Second it inserts record into MS SQL Method and mark them as copied into Oracle model
        ///</summary>
        public static void UpdateProductsFromOracle()
        {
            var oracleContext = new OracleEntities();
            var msSqLcontext = new SupermarketContext();
            var products = oracleContext.PRODUCTS
                .Where(p => p.ISCOPIED == false && p.ISDELETED == false)
                .Select(p => new
                {
                    p.PRODUCTNAME,
                    p.PRICE,
                    p.VENDOR.VENDORNAME,
                    p.MEASURE.MEASURENAME,
                    p.PRODUCTSTYPE.TYPENAME
                }).ToList();

            if (products.Count > 0)
            {
                var addedProductsList = new List<string>();

                foreach (var product in products)
                {
                    var productName = product.PRODUCTNAME;
                    var price = product.PRICE;
                    var vendorId = MsSqlManager.GetVendorIdByName(product.VENDORNAME);
                    var measureId = MsSqlManager.GetMeasureIdByName(product.MEASURENAME);
                    var typeId = MsSqlManager.GetTypeIdByName(product.TYPENAME);

                    try
                    {
                        msSqLcontext.Products.AddOrUpdate(
                            p => p.ProductName,
                            new Product()
                            {
                                ProductName = productName,
                                VendorId = vendorId,
                                MeasureId = measureId,
                                ProductTypeId = typeId,
                                Price = (float)price
                            });

                        msSqLcontext.SaveChanges();
                        addedProductsList.Add(productName);
                    }
                    catch (Exception ex)
                    {
                        throw new ArgumentException();
                    }
                }

                var productsToChange =
                    oracleContext.PRODUCTS.Where(p => addedProductsList.Contains(p.PRODUCTNAME)).ToList();
                productsToChange.ForEach(p => p.ISCOPIED = true);
                oracleContext.SaveChanges();

                Console.WriteLine("\nAdded new Products from OracleBD into MS SQL Server:");
                productsToChange.ForEach(p => Console.WriteLine("Added product name: {0}", p.PRODUCTNAME));
            }
            else
            {
                Console.WriteLine("\nThere is no new records to import into PRODUCTS table!");
            }
        }
        ///<summary>
        ///This is summary for method that transfer records from Oracle model into MQ SQL Server model.
        ///The method first select records from Oracle model which have not yet been copied or deleted.
        ///Second it inserts record into MS SQL Method and mark them as copied into Oracle model
        ///</summary>
        public static void UpdateVendorsFromOracle()
        {
            var oracleContext = new OracleEntities();
            var msSqLcontext = new SupermarketContext();
            var vendors = oracleContext.VENDORS
                    .Where(v => v.ISCOPIED == false && v.ISDELETED == false)
                    .Select(v => new
                    {
                        v.VENDORNAME
                    })
                    .ToList();

            if (vendors.Count > 0)
            {
                var addedVendorsList = new List<string>();

                foreach (var vendor in vendors)
                {
                    var vendorName = vendor.VENDORNAME;

                    try
                    {
                        msSqLcontext.Vendors.AddOrUpdate(
                            v => v.VendorName,
                            new Vendor()
                            {
                                VendorName = vendorName
                            });

                        msSqLcontext.SaveChanges();
                        addedVendorsList.Add(vendorName);
                    }
                    catch (Exception ex)
                    {
                        throw new ArgumentException();
                    }

                }

                var vendorsToChange = oracleContext.VENDORS.Where(v => addedVendorsList.Contains(v.VENDORNAME)).ToList();
                vendorsToChange.ForEach(v => v.ISCOPIED = true);
                oracleContext.SaveChanges();

                Console.WriteLine("\nAdded new Vendors from OracleBD into MS SQL Server:");
                vendorsToChange.ForEach(v => Console.WriteLine("Added vendor name: {0}", v.VENDORNAME));
            }
            else
            {
                Console.WriteLine("\nThere is no new records to import into VENDORS table!");
            }
        }
        ///<summary>
        ///This is summary for method that transfer records from Oracle model into MQ SQL Server model.
        ///The method first select records from Oracle model which have not yet been copied or deleted.
        ///Second it inserts record into MS SQL Method and mark them as copied into Oracle model
        ///</summary>
        public static void UpdateProductsTypesFromOracle()
        {
            var oracleContext = new OracleEntities();
            var msSqLcontext = new SupermarketContext();
            var productstypes = oracleContext.PRODUCTSTYPES
                .Where(pt => pt.ISCOPIED == false && pt.ISDELETED == false)
                .Select(pt => new
                {
                    pt.TYPENAME
                }).ToList();

            if (productstypes.Count > 0)
            {
                var addedProductsTypesList = new List<string>();

                foreach (var type in productstypes)
                {
                    var typeName = type.TYPENAME;

                    try
                    {
                        msSqLcontext.ProductTypes.AddOrUpdate(
                            pt => pt.TypeName,
                            new ProductType()
                            {
                                TypeName = typeName
                            });

                        msSqLcontext.SaveChanges();
                        addedProductsTypesList.Add(typeName);
                    }
                    catch (Exception ex)
                    {
                        throw new ArgumentException();
                    }
                }

                var typesToChange =
                    oracleContext.PRODUCTSTYPES.Where(pt => addedProductsTypesList.Contains(pt.TYPENAME)).ToList();
                typesToChange.ForEach(pt => pt.ISCOPIED = true);
                oracleContext.SaveChanges();

                Console.WriteLine("\nAdded new Types from OracleBD into MS SQL Server:");
                typesToChange.ForEach(tp => Console.WriteLine("Added types name: {0}", tp.TYPENAME));
            }
            else
            {
                Console.WriteLine("\nThere is no new records to import into PRODUCTSTYPES table!");
            }
        }