public void test3()
        {
            Order order = new Order(DateTime.Now)
            {
                Items = new List<LineItem>()
                {
                    new LineItem("cheese", 10),
                    new LineItem("ham", 20),
                    new LineItem("dough", 5)
                },
                Customer = new Customer("Nikola")
            };
            Db.Order.Add(order);
            Db.SaveChanges();
            var itemCount = Db.LineItems.Count();
            Assert.AreEqual(itemCount, 3);

            var dough = Db.LineItems.Find(order.Items[2].Id);
            Assert.AreEqual(dough.Name, "dough");


            var orderDto = SerializationUtils.DeepClone(order);
            orderDto.Items[2].Name = "Pizza dough";
            orderDto.Customer.Name = "Petar";
            EfWriter.ChangesFrom(orderDto).Include(o => o.Items).Apply();
            Db.SaveChanges();
            ReinitDb();
            order = Db.Order.Find(order.Id);
            Assert.AreEqual(order.Items[2].Name, "Pizza dough");
            Assert.AreEqual(order.Customer.Name, "Nikola");

            orderDto = SerializationUtils.DeepClone(order);
            orderDto.Items[2].Name = "Special pizza dough!";
            orderDto.Customer.Name = "Milos";
            EfWriter.ChangesFrom(orderDto).Include(o => o.Customer).Apply();
            Db.SaveChanges();
            ReinitDb();
            order = Db.Order.Find(order.Id);
            Assert.AreEqual(order.Items[2].Name, "Pizza dough");
            Assert.AreEqual(order.Customer.Name, "Milos");
        }
        public void test3()
        {
            Order order = new Order(DateTime.Now)
            {
                Items = new List<LineItem>()
                {
                    new LineItem("cheese", 10),
                    new LineItem("ham", 20),
                    new LineItem("dough", 5)
                }
            };
            Db.Order.Add(order);
            Db.SaveChanges();
            var itemCount = Db.LineItems.Count();
            Assert.AreEqual(itemCount, 3);

            var dough = Db.LineItems.Find(order.Items[2].Id);
            Assert.AreEqual(dough.Name, "dough");


            var orderDto = SerializationUtils.DeepClone(order);
            orderDto.Items[2].Name = "Pizza dough";
            EfWriter.ApplyGraphChanges<Order, LineItem>(orderDto);
            Db.SaveChanges();
            ReinitDb();
            dough = Db.LineItems.Find(order.Items[2].Id);
            Assert.AreEqual(dough.Name, "Pizza dough");

            orderDto = SerializationUtils.DeepClone(order);
            orderDto.Items[2].Name = "Special pizza dough!";
            EfWriter.ApplyGraphChanges<Order, Customer>(orderDto);
            Db.SaveChanges();
            ReinitDb();
            dough = Db.LineItems.Find(order.Items[2].Id);
            Assert.AreEqual(dough.Name, "Pizza dough");
        }
        public void referencing_entities_enough_one_way()
        {
            Order order = new Order(DateTime.Now);
            Db.Order.Add(order);
            Db.SaveChanges();

            ReinitDb();
            var item = new LineItem("cheese", 10);
            item.Order = Db.Order.Find(order.Id);
            Db.LineItems.Add(item);
            Db.SaveChanges();

            ReinitDb();
            item = Db.LineItems.Find(item.Id);
            order = Db.Order.Find(order.Id);
            Assert.IsNotNull(item.Order);
            Assert.AreEqual(order.Items.Count, 1);


            order = new Order(DateTime.Now);
            Db.Order.Add(order);
            Db.SaveChanges();

            ReinitDb();
            item = new LineItem("cheese", 10);
            order.Items = new List<LineItem>() { item };
            Db.SaveChanges();

            ReinitDb();
            item = Db.LineItems.Find(item.Id);
            order = Db.Order.Find(order.Id);
            Assert.IsNotNull(item.Order);
            Assert.AreEqual(order.Items.Count, 1);
        }
        public void attaching_entity_with_relations_and_saving_removes_relations()
        {
            var order = new Order(DateTime.Now)
            {
                Items = new List<LineItem>()
                {
                    new LineItem("cheese", 10),
                    new LineItem("ham", 20),
                    new LineItem("dough", 5)
                }
            };
            Db.Order.Add(order);
            Db.SaveChanges();

            ReinitDb();
            order = Db.Order.Find(order.Id);
            Assert.AreEqual(order.Items.Count, 3);

            ReinitDb();
            Db.Configuration.ProxyCreationEnabled = false;
            order = SerializationUtils.DeepClone(Db.Order.Find(order.Id));
            order.OrderTime = DateTime.Now;
            Db.Entry(order).State = EntityState.Modified;
            Db.SaveChanges();
            Db.Configuration.ProxyCreationEnabled = true;

            ReinitDb();
            order = Db.Order.Find(order.Id);
            Assert.AreEqual(order.Items.Count, 0);

        }
        public void test4()
        {
            Order order = new Order(DateTime.Now)
            {
                Items = new List<LineItem>()
                {
                    new LineItem("cheese", 10),
                    new LineItem("ham", 20),
                    new LineItem("dough", 5)
                },
                Customer = new Customer("Nikola")
            };
            Db.Order.Add(order);
            Db.SaveChanges();
            var itemCount = Db.LineItems.Count();
            Assert.AreEqual(itemCount, 3);

            var dough = Db.LineItems.Find(order.Items[2].Id);
            Assert.AreEqual(dough.Name, "dough");

            var orderDto = SerializationUtils.DeepClone(order);
            orderDto.Items.Add(new LineItem("Ketchup", 1));
            orderDto.Items.Add(new LineItem("Mayo", 1));
            EfWriter.ApplyGraphChanges<Order, LineItem>(orderDto);
            Db.SaveChanges();
            ReinitDb();
            order = Db.Order.Find(order.Id);
            Assert.AreEqual(order.Items.Count, 5);
        }