public void EFFK_InsertAddRelated()
        {
            var newCust = new EFFKClient.Customer()
            {
                ID = 11, EditTimeStamp = new byte[] { 0 }
            };
            var newOrder1 = new EFFKClient.Order()
            {
                ID = 100020, CustomerId = 11
            };
            var newOrder2 = new EFFKClient.Order()
            {
                ID = 100021, CustomerId = 1
            };
            var newOrder3 = new EFFKClient.Order()
            {
                ID = 100022
            };

            ctx.AddObject("CustomObjectContext.Customers", newCust);
            ctx.AddRelatedObject(newCust, "Orders", newOrder1);
            ctx.AddRelatedObject(newCust, "Orders", newOrder2);
            ctx.AddRelatedObject(newCust, "Orders", newOrder3);

            ctx.SaveChanges();

            VerifyServerOrderId(100020, 11);
            VerifyServerOrderId(100021, 11);
            VerifyServerOrderId(100022, 11);
        }
        public void EFFK_InsertAddRelated()
        {
            var newCust = new EFFKClient.Customer() { ID = 11, EditTimeStamp = new byte[] { 0 } };
            var newOrder1 = new EFFKClient.Order() { ID = 100020, CustomerId = 11 };
            var newOrder2 = new EFFKClient.Order() { ID = 100021, CustomerId = 1 };
            var newOrder3 = new EFFKClient.Order() { ID = 100022 };

            ctx.AddObject("CustomObjectContext.Customers", newCust);
            ctx.AddRelatedObject(newCust, "Orders", newOrder1);
            ctx.AddRelatedObject(newCust, "Orders", newOrder2);
            ctx.AddRelatedObject(newCust, "Orders", newOrder3);

            ctx.SaveChanges();

            VerifyServerOrderId(100020, 11);
            VerifyServerOrderId(100021, 11);
            VerifyServerOrderId(100022, 11);
        }
        public void EFFK_InsertTest()
        {
            var newCust = new EFFKClient.Customer()
            {
                ID = 10, Name = "New Cust", EditTimeStamp = new byte[] { 0, 1, 2, 3 }
            };
            var cust1 = ctx.CreateQuery <EFFKClient.Customer>("CustomObjectContext.Customers").Where(c => c.ID == 1).FirstOrDefault();

            var orders = new Tuple <EFFKClient.Order, int>[]
            {
                Tuple.Create(new EFFKClient.Order()
                {
                    ID = 100000, Customers = null
                }, 0),                                                                                          // Set None
                Tuple.Create(new EFFKClient.Order()
                {
                    ID = 100007, CustomerId = 10
                }, 10),                                                                                         // Set FK only, new
                Tuple.Create(new EFFKClient.Order()
                {
                    ID = 100008, Customers = newCust
                }, 10),                                                                                         // Set Nav only, new
                Tuple.Create(new EFFKClient.Order()
                {
                    ID = 100009, CustomerId = 10, Customers = newCust
                }, 10),                                                                                         // Set FK + Nav to same, new
                Tuple.Create(new EFFKClient.Order()
                {
                    ID = 100010, CustomerId = 1, Customers = newCust
                }, 10),                                                                                         // Set FK + Nav to diff, new

                // Order Object | Expected Customer ID
                Tuple.Create(new EFFKClient.Order()
                {
                    ID = 100001, CustomerId = 1, Customers = null
                }, 1),                                                                                          // Set FK only
                Tuple.Create(new EFFKClient.Order()
                {
                    ID = 100002, Customers = cust1
                }, 1),                                                                                          // Set Nav only
                Tuple.Create(new EFFKClient.Order()
                {
                    ID = 100003, CustomerId = 1, Customers = cust1
                }, 1),                                                                                          // Set FK + Nav to same
                Tuple.Create(new EFFKClient.Order()
                {
                    ID = 100004, CustomerId = 2, Customers = null
                }, 1),                                                                                          // Set FK + Nav to diff
                Tuple.Create(new EFFKClient.Order()
                {
                    ID = 100005, CustomerId = 2, Customers = cust1
                }, 1),                                                                                          // Set FK + Nav to diff
                Tuple.Create(new EFFKClient.Order()
                {
                    ID = 100006, CustomerId = 2, Customers = newCust
                }, 1),                                                                                          // Set FK + Nav to diff
            };

            ctx.AddObject("CustomObjectContext.Customers", newCust);
            foreach (var t in orders)
            {
                ctx.AddObject("CustomObjectContext.Orders", t.Item1);
                if (t.Item1.CustomerId == 2)
                {
                    ctx.SetLink(t.Item1, "Customers", cust1);
                }
                else if (t.Item1.Customers != null)
                {
                    ctx.SetLink(t.Item1, "Customers", t.Item1.Customers);
                }
                ctx.SaveChanges();

                if (t.Item2 == 0)
                {
                    VerifyServerOrderId(t.Item1.ID, null);
                }
                else
                {
                    VerifyServerOrderId(t.Item1.ID, t.Item2);
                }
            }
        }
        public void EFFK_InsertTest()
        {
            var newCust = new EFFKClient.Customer() { ID = 10, Name = "New Cust", EditTimeStamp = new byte[] { 0, 1, 2, 3 } };
            var cust1 = ctx.CreateQuery<EFFKClient.Customer>("CustomObjectContext.Customers").Where(c => c.ID == 1).FirstOrDefault();

            var orders = new Tuple<EFFKClient.Order, int>[]
            {
                Tuple.Create(new EFFKClient.Order(){ ID=100000, Customers=null },  0),                          // Set None
                Tuple.Create(new EFFKClient.Order(){ ID=100007, CustomerId =10 }, 10),                          // Set FK only, new
                Tuple.Create(new EFFKClient.Order(){ ID=100008, Customers = newCust }, 10),                     // Set Nav only, new
                Tuple.Create(new EFFKClient.Order(){ ID=100009, CustomerId =10, Customers=newCust }, 10),       // Set FK + Nav to same, new
                Tuple.Create(new EFFKClient.Order(){ ID=100010, CustomerId =1, Customers=newCust }, 10),        // Set FK + Nav to diff, new

                // Order Object | Expected Customer ID
                Tuple.Create(new EFFKClient.Order(){ ID=100001, CustomerId =1, Customers=null },  1),           // Set FK only
                Tuple.Create(new EFFKClient.Order(){ ID=100002, Customers=cust1 },  1),                         // Set Nav only
                Tuple.Create(new EFFKClient.Order(){ ID=100003, CustomerId =1, Customers=cust1 }, 1),           // Set FK + Nav to same
                Tuple.Create(new EFFKClient.Order(){ ID=100004, CustomerId =2, Customers=null }, 1),            // Set FK + Nav to diff
                Tuple.Create(new EFFKClient.Order(){ ID=100005, CustomerId =2, Customers=cust1 }, 1),           // Set FK + Nav to diff
                Tuple.Create(new EFFKClient.Order(){ ID=100006, CustomerId =2, Customers=newCust }, 1),         // Set FK + Nav to diff
            };

            ctx.AddObject("CustomObjectContext.Customers", newCust);
            foreach (var t in orders)
            {
                ctx.AddObject("CustomObjectContext.Orders", t.Item1);
                if (t.Item1.CustomerId == 2)
                {
                    ctx.SetLink(t.Item1, "Customers", cust1);
                }
                else if (t.Item1.Customers != null)
                {
                    ctx.SetLink(t.Item1, "Customers", t.Item1.Customers);
                }
                ctx.SaveChanges();

                if (t.Item2 == 0)
                {
                    VerifyServerOrderId(t.Item1.ID, null);
                }
                else
                {
                    VerifyServerOrderId(t.Item1.ID, t.Item2);
                }
            }
        }